perm filename CKLY.MAC[3,ALS]1 blob sn#505888 filedate 1980-04-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00044 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00008 00002		TITLE	CKL   CHECKERS LEARNING ROUTINES  12/8/70
C00012 00003	MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER
C00015 00004	MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN BDOUT PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D BOUT SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS
C00017 00005	TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1
C00020 00006	LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4
C00025 00007	BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1
C00029 00008	LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2
C00033 00009	TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2
C00038 00010	NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B
C00042 00011	LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2
C00045 00012	ALS1 ALS1B ALS1A ALS2 ALS3
C00049 00013	ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8
C00051 00014	LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3
C00057 00015	BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE
C00062 00016	NOMOV NOMOVE ENDERR LERR NOSTO STOP STOMP STTEST STBIT
C00066 00017	LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L13 L14 L14N
C00073 00018	L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
C00077 00019	TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN
C00080 00020	C2P C3P C4P C5 C2N C3N C4N C6
C00082 00021	CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
C00083 00022	LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC
C00086 00023	TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL
C00089 00024	FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT
C00092 00025	LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20
C00097 00026	LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS
C00098 00027	EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG
C00102 00028	DSAVE RSAVE RFILL
C00106 00029	DFILL DFILL2 DSKERR DATA RDATA
C00109 00030	MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF
C00113 00031	SAVMOV SAV0
C00115 00032	MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX
C00117 00033	INSERT INS2 INS1A INS3A INS3B INS4B INS4C INS4D INS4E INS4F INS5 INSX INS6
C00122 00034	INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR
C00125 00035	ZEROIT DMPFIL DMPFI1 DMPFI2 DMPFI3 DSKBKD DSKBKM BKMIN BKMIN2 INPA BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN FILEI2 INBITS
C00128 00036	BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4
C00131 00037	FIXX NOFIND FIXK FIXK2
C00134 00038	RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13
C00138 00039	FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3
C00141 00040	SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
C00148 00041	SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 XPAR TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE PAR TABLST TAB1 TABLS2 TAB2 TAB3 TAB3A TAB3B TAB3C TAB4 TAB4A TAB4B TAB5 TAB5A TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB24A TAB25 TAB26 TAB27 TAB31 TAB32 TAB32A TAB33 TAB34
C00161 00042	LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES
C00164 00043
C00167 00044	BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK
C00176 ENDMK
C⊗;
	TITLE	CKL   CHECKERS LEARNING ROUTINES  12/8/70
;WITH FIX ROUTINE ADDED
;REVISED TO REDUCE MEMORY AND DISK SIZES

	INTERN	BEGINL,CMOVE,HEADFL,LBYT,LFLAG,NOSTO
	INTERN	LXF,LZERO,TRNKNO,DIVIDE,SYM,LC,INPSIZ
	INTERN	LZER2,LZER3
	INTERN	RFILL,DFILL,RSAVE,DSAVE,EVAL11,LOADTA
	INTERN	WHOWON,LCONTS,LCONTZ,ZL,BEGL3
	INTERN	BOOKA,BOOKP,BOOKK,BOOKM,BOOKI,INPSIZ,INPA,INPP,INPK,LABEL
	INTERN	TABFIX,TABLST,PAR,XPAR
	EXTERN	LPTBUF,NUM2
	EXTERN	FINDFI,FINDX1,X4NORM,X4ALL,X4TAB
;	EXTERN	PCCNT,PHASE,PHASEV
	EXTERN	CRIP,REVERA,REVERP,REVERK,WHERE
	EXTERN	COLOR,BITTAB
;	EXTERN	CFLAG
	EXTERN	LEGAL,MAGIN,MAGOUT,MAGTAP,TPUNIT,OUTIN,MGIBUF,MGOBUF
	EXTERN	NOYES,NUM3,NUMOUT,OCT2,OCTOUT,RJ2,RJ4,RJOUT,SCAN,TYI
	EXTERN	TERPRI,EOL,NEWLIN,PRINT,S,SI
	EXTERN	LOSE,LPTFIX,DWFLAG
	EXTERN	PLA,PLP,PLK,PLRF,PLLF,PLRB,PLLB,PUP,ZZ,PLY
	EXTERN	PRNAME,LPFLAG,BEGIN,COMEND
	EXTERN	TA,TP,TK,TYO,LASCAR,ERR,SIDE,OJ
;	EXTERN	TLIST,EEB,EEB2
	EXTERN	USEBOK
	INTERN	EV,CFTAB2,INIT1,CFLAG

CFTAB2:	MOVEI	U1,[ASCIZ /CFTAB2 /]
	JRST	ZZZZZZ
INIT1:	MOVEI	U1,[ASCIZ /INIT1 /]
	JRST	ZZZZZZ
TLIST:	MOVEI	U1,[ASCIZ /TLIST /]
	JRST	ZZZZZZ
PCCNT:	MOVEI	U1,[ASCIZ /PCCNT /]
	JRST	ZZZZZZ
KSTART:	MOVEI	U1,[ASCIZ /KSTART /]
ZZZZZZ:	PUSHJ	PDP,PRINT
EV:
PHASEV:	POPJ	PDP,
PHASE:	Z
CFLAG:	Z
	Z
	Z
EEB:	BLOCK	20
	Z
	Z
EEB2:	BLOCK	20
RFU:	Z
LFU:	Z
LBU:	Z
RBU:	Z

;         REGISTER ASSIGNMENTS
;ASSIGNMENT	USAGE
Z=0
X1=1	;	INDEX MAIN
U1=2
X2=3	;	INDEX PATH
U2=4
X3=5	;	INDEX PLAUS
U3=6
X4=7	;	INDEX TWIG
U4=10
X5=11	;	PASS COLOR
U5=12
Q=13
A=14	;	ACTIVE
P=15	;	PASSIVE
K=16	;	KINGS
PDP=17	;	PUSHJ
;MA MP MK ME MWL BEST X1S X2S SAVX2 U2SS WHOWON WINLOS BKMOVE X4CNT X4MOVE HIGH LOW EQUAL THIGH TLOW TEQUAL HEADFL U4S KEAR BOLFLG LXF TRNKNO LBYT LFLAG CMOVE COUNT LPOINT STIME LTIME LTIME0 RTIME TIME HEADER

MA:	BLOCK	300
MP:	BLOCK	300
MK:	BLOCK	300
ME:	BLOCK	300
MWL:	BLOCK	300		;WHOWON INDICATORS

OPDEF	TTYUUO	[51B8]

BEST:	Z		;BEST INDEX VALUE
X1S:	Z
X2S:	Z
SAVX2:	Z
U2SS:	Z
WHOWON:	Z
WINLOS:	Z		;COUNT OF DISTANCE TO WIN OR LOSS
BKMOVE:	Z		;BOOK MOVE SAVE
X4CNT:	Z
X4MOVE:	Z
HIGH:	BLOCK	4
LOW:	BLOCK	4
EQUAL:	BLOCK	4
THIGH:	Z
TLOW:	Z
TEQUAL:	Z
HEADFL:	-1
U4S:	Z			;TEMPORARY STORAGE
KEAR:	Z			;FLAG FOR KEAR LEARNING DATA
BOLFLG:	Z		;FLAG FOR BOLAND LEARNING DATA
LXF:	Z			;FLAG FOR LEGAL BOOK MOVE
TRNKNO:	-1			;TRUNK COUNTER
LBYT:	Z			;BYTE POINTER
LFLAG:	Z
CMOVE:	Z
COUNT:	Z
LPOINT:	Z			;POINTER FOR VARIATIONS

STIME:	SETZ	U1,
	CALL	U1,[SIXBIT /RUNTIME/]
	MOVEM	U1,TIME
	POPJ	PDP,

LTIME:	SETZ	U1,
	CALL	U1,[SIXBIT /RUNTIME/]
	SUB	U1,TIME
	ADDM	U1,LABEL
LTIME0:	ADDM	U1,TIME
	MOVEI	U2,↑D1000
	IDIVM	U1,U2
	MOVE	U1,U2
	PUSHJ	PDP,RJOUT1
	POPJ	PDP,

RTIME:	SETZ	U1,
	CALL	U1,[SIXBIT /RUNTIME/]
	SUB	U1,TIME
	JRST	LTIME0

TIME:	Z
HEADER:	ASCIZ /Special symbols-  ' Best move,	= fair only,	% definitely bad move.

Move #	Move	Legal Moves
/
;MOVOUT IP IK CDIFF TEST CRFST LPTREE CRUNT CTELLC TELPAR SIG SETW SETPAR SETB FIND MOVIN BDOUT PLAY PLAYBS PC PB GO DEBUG REVERS PW CTOTAL W D BOUT SUM RECIN EXIT1 IA FINDM DIFF TOTAL FSTCR RUNT CSFLAG TRESET TREE MOP TELLC MOVX LTREE MESS

;THE FOLLOWING DEFINITIONS ARE NEEDED TO DEFINE GLOBELS.
;THIS SECTION TAKES THE PLACE OF PD.MAC

INTERN	TRESET,TREE,TELPAR,SIG,SETW,SETPAR,SETB,FIND,MOVIN
INTERN	ACCEPT,BDOUT,PLAYBS,PC,PB,TELLC,LTREE,GO,DEBUG
INTERN	REVERS,PW,CTOTAL,LEGM,W,D,BOUT,MESS,IA,FINDM
INTERN	CDIFF,DIFF,TOTAL,CRFST,FSTCR,LPTREE,RUNT,CRUNT,CTELLC,CSFLAG
INTERN	MOVOUT,MOVES,IP,IK,TEST,SUM,RECIN
INTERN	MOP,MOVX,EXIT1,DATA
INTERN	DSTREE,TREFIX,BK

	EXTERN	NOTICE
DSTREE:
TREFIX:
BK:
MOVOUT:
IP:
IK:
CDIFF:
TEST:
CRFST:
LPTREE:
CRUNT:
CTELLC:
TELPAR:
SIG:
SETW:
SETPAR:
SETB:
FIND:
MOVIN:
;BDOUT:
PLAY:
PLAYBS:
PC:
PB:
GO:
DEBUG:
REVERS:
PW:
CTOTAL:
W:
D:
;BOUT:
SUM:
RECIN:
EXIT1:
	RELEAS	5,
	JRST	NOTICE

IA:
FINDM:
DIFF:
TOTAL:
FSTCR:
RUNT:
CSFLAG:
TRESET:
TREE:
MOP:
TELLC:
MOVX:
LTREE:	Z
MESS:	ASCIZ	/
/
;TAB1E SIGZ11 SIGZ12 SIGZ13 SIGZ14 SIGZ15 SIGZ16 HIGH11 HIGH12 HIGH13 HIGH14 HIGH15 HIGH16 EQU11 EQU12 EQU13 EQU14 EQU15 EQU16 LOW11 LOW12 LOW13 LOW14 LOW15 LOW16 TAB1P TAB1P1

;FIRST LEVEL TABLE EVALUATION MACROS AND DATA


DEFINE	MACZ	(SC)	<;TABLE EVALUATION SCORE
	MOVE	Z,SIGZ1'SC(A)
	CAMN	K,A
	JRST	.+7		;DO NOT SCORE BOOK MOVE
	CAMGE	Z,SIGZ1'SC(K)
	AOS	HIGH1'SC(P)
	CAMN	Z,SIGZ1'SC(K)
	AOS	EQU1'SC(P)
	CAMLE	Z,SIGZ1'SC(K)
	AOS	LOW1'SC(P)>


TAB1E:	MACZ	1
	MACZ	2
	MACZ	3
	MACZ	4
	MACZ	5
	MACZ	6
	POPJ	PDP,

SIGZ11:	BLOCK	20
SIGZ12:	BLOCK	20
SIGZ13:	BLOCK	20
SIGZ14:	BLOCK	20
SIGZ15:	BLOCK	20
SIGZ16:	BLOCK	20

HIGH11:	BLOCK	4
HIGH12:	BLOCK	4
HIGH13:	BLOCK	4
HIGH14:	BLOCK	4
HIGH15:	BLOCK	4
HIGH16:	BLOCK	4

EQU11:	BLOCK	4
EQU12:	BLOCK	4
EQU13:	BLOCK	4
EQU14:	BLOCK	4
EQU15:	BLOCK	4
EQU16:	BLOCK	4

LOW11:	BLOCK	4
LOW12:	BLOCK	4
LOW13:	BLOCK	4
LOW14:	BLOCK	4
LOW15:	BLOCK	4
LOW16:	BLOCK	4

DEFINE	MACP	(SC)	<;PRINT MACRO
	MOVE	X2,HIGH1'SC(P)
	ADD	X2,LOW1'SC(P)
	ADD	X2,EQU1'SC(P)
	MOVEM	X2,X2S
	MOVE	X3,LOW1'SC(P)
	IMULI	X3,↑D100
	IDIV	X3,X2
	MOVE	U1,X3
	PUSHJ	PDP,RJOUT3
	MOVE	X3,HIGH1'SC(P)
	IMULI	X3,↑D100
	MOVE	X2,X2S
	IDIV	X3,X2
	MOVE	U1,X3
	SETZM	HIGH1'SC(P)
	SETZM	EQU1'SC(P)
	SETZM	LOW1'SC(P)
	PUSHJ	PDP,RJOUT1>

TAB1P:	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /TABLE	   L11H      L12H      L13H      L14H      L15H      L16H
/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	MOVEI	P,3
TAB1P1:	MOVEI	U1,[ASCIZ /PHASE/]
	PUSHJ	PDP,PRINT
	MOVE	U1,P
	PUSHJ	PDP,NUMOUT
	MACP	1
	MACP	2
	MACP	3
	MACP	4
	MACP	5
	MACP	6
	PUSHJ	PDP,TERPRI
	SOJGE	P,TAB1P1
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

;LOADTA BEGINL SSD SSD1 SSD2 SSD3 BEGL2 BEGL4

LOADTA:	PUSHJ	PDP,DFILL
BEGINL:	PUSHJ	PDP,TERPRI
	SETOM	TRNKNO
	SETOM	HEADFL
	MOVEI	U1,1
	MOVEM	U1,SI
	SETOM	LCONTF#
	SETZB	U1,LDEPTH
	ADDI	U1,3		;ALLOW 3 MORE
	MOVEM	U1,KDEPTH
	SETZM	LFLAG6
	SETZM	LFLAG1

BEGL2:	SETZM	PRNVAR		;CHANGING TO SETOM DID NOT HELP
	SETZM	DSKTAP
	SETZM	MGIBUF
BEGL4:	MOVEI	U1,[ASCIZ /TYPE B, K, OR L :/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TYI
	CAIE	U1,12
	CAIN	U1,15
	JRST	.-3
	CAIN	U1,"B"
	JRST	BEGLB
	SETZM	BOLFLG		;NOT BOLAND
	CAIN	U1,"K"
	JRST	BEGLK
	CAIN	U1,"L"
	JRST	BEGLL
	JRST	BEGL3
;BEGLB BEGLK BEGLL BEGL3 GETGO LB1 COMM2 COMM COMM3 COMM1

BEGLB:	MOVE	U1,[SIXBIT /BOLAND/]
	MOVEM	U1,DATAG
	SETOM	BOLFLG		;SET FLAG 
	MOVEI	U1,[ASCIZ /BOLAND WILL BE USED/]
	JRST	.+10
BEGLK:	MOVE	U1,[SIXBIT /KEARS/]
	MOVEM	U1,DATAG
	MOVEI	U1,[ASCIZ /KEARS WILL BE USED/]
	JRST	.+4
BEGLL:	MOVE	U1,[SIXBIT /LEES/]
	MOVEM	U1,DATAG
	MOVEI	U1,[ASCIZ /LEES WILL BE USED/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TYI
	CAIE	U1,15
	JRST	.-2
BEGL3:	PUSHJ	PDP,DSKINI
	JRST	BEGL4
	PUSHJ	PDP,DSKIN2
	JRST	BEGL4
GETGO:	MOVEI	Z,777777
	MOVEM	Z,CFLAG
	SETOM	TRUNKF
	SETZM	HIGH
	SETZM	LOW
	SETZM	EQUAL
	SETZM	THIGH
	SETZM	TLOW
	SETZM	TEQUAL
	SETZM	HEADFL
	SOS	HEADFL
	SETZM	COUNT		;INITIALIZE FOR LEARNING
	PUSHJ	PDP,STIME
		;ASK TELETYPE WHERE TO START--IF NOT AT FRONT, THEN
		;RESET TRNKNO.  SKIP OVER TRNKNO NUMBER OF TRUNKS NOW.
	MOVEI	U1,[ASCIZ /  TRUNK NUMBER? : /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,1
	PUSHJ	PDP,SCAN	;GOBBLE UP CR
	PUSHJ	PDP,EOL		;SCAN CHAR.
	JRST	BEGIN3		;CR
	SOS	U2,U1		;NUMBER
	MOVEM	U1,TRNKNO	;STARTING TRUNK NO.
	SETZM	KEAR		;TURN OFF KEAR LEARNING FLAG
LB1:	PUSHJ	PDP,NEWLIN	;FIRST CHAR. OF CARD IMAGE IN U1
	SKIP			;EOF
	CAIN	U1,"<"		;LEES OR TESCHELEIT LEARNING DATA?
	SETZM	KEAR		;YES, SO SET FLAG TO 0
	CAIN	U1,"!"		;KEAR LEARNING DATA?
	AOS	KEAR		;YES, SO SET FLAG
	CAIN	U1,"&"
	JRST	.+3
	CAIE	U1,"#"		;A "#"?
	JRST	LB1		;NO
	SOJGE	U2,LB1		;YES, BUT IS IT PROPER TRUNK CARD?
	PUSHJ	PDP,COMM1
	SETZM	X2		;YES
	SETOM	LRNJMP		;TO SKIP DATA UPDATE FIRST TIME
	JRST	LTR

COMM2:	SOJG	U2,COMM+1
	MOVEI	X1,15
	PUSHJ	PDP,TYO
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT	; CKLY
	JRST	COMM3

COMM:	MOVEI	U2,26
	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	MOVE	X1,U1
	PUSHJ	PDP,TYO		;PRINT THE CHAR.
	PUSHJ	PDP,MAGOUT	; CKLY
	CAIE	U1,15		;<CR>?
	JRST	COMM2		;NO
COMM3:	MOVEI	X1,12		;YES, SO ...
	PUSHJ	PDP,TYO		;PRINT LINE-FEED
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	AOSE	HEADFL
	POPJ	PDP,
COMM1:	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,HEADER
	PUSHJ	PDP,PRINT
	POPJ	PDP,		;AND RETURN
;LFSTRT BEGIN3 BEGIN2 BEGIN4 LTR LTR1 LTR2 UPTAB UPTAB2

LFSTRT:	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	JRST	BEGIN		;EOF FOUND
	JRST	BEGIN2+2	;U1 HAS FIRST CHAR. FOLLOWING LINE FEED

BEGIN3:	PUSHJ	PDP,TERPRI
	TTYUUO	11,0		;CLEAR TTY BUFFER
	SETOM	LRNJMP		;TO SKIP DATA UPDATE FIRST TIME
BEGIN2:
BEGIN4:	PUSHJ	PDP,NEWLIN	;FIRST CHAR. OF NEW CARD IN U1
	JRST	BEGIN		;EOF
	CAIN	U1,"!"		;"!" IS FIRST CHAR. OF KEAR DATA
	AOSA	KEAR		;KEAR NOT = 0 IFF KEAR DATA BEING PROCESSED
	SKIPA
	JRST	.+10
	CAIN	U1,"#"		;A TRUNK CARD?
	JRST	LTR		;YES
	CAIN	U1,"&"		;TEST FOR BOLAND HEADER
	JRST	LTR
	CAIE	U1,"<"		;COMMENT CARD?
	JRST	.+4		;NO
	SETZM	KEAR		;TURN OFF KEAR LEARNING FLAG
	PUSHJ	PDP,COMM	;YES, SO PRINT COMMENT
	JRST	BEGIN4		;AND GET NEXT CARD
	CAIN	U1,">"		;END OF DATA?
	JRST	LSTOP		;YES
	CAIE	U1,14		;FORM FEED?
	JRST	.+4		;NO
	PUSHJ	PDP,MAGIN	;YES, SO GET NEXT CHARACTER & TRY AGAIN
	HALT			;EOF FOUND
	JRST	BEGIN4+2
	CAIE	U1," "		;COLUMN 1 A BLANK?
	JRST	LMOVE+2		;NO, SO MUST BE A MOVE CARD
	JRST	LBRNCH		;MUST BE VARIATION CARD

LTR:	SETZM	WHOWON		;TREAT GAME AS A DRAW TILL WE KNOW BETTER
	SETZM	MOVNUM#
	MOVEI	U1,"TK"
	SKIPN	KEAR
	SETZ	U1,
	MOVEM	U1,LPOINT		;A TRUNK CARD HAS BEEN FOUND
LTR1:	AOS	U1,TRNKNO	;ADD 1 TO TRUNK CARD COUNTER
	JUMPE	U1,LCONT	;1ST TIME THRU.  NO DATA TO REPORT YET
	SKIPE	BOLFLG
	TRNN	U1,7
	JRST	.+2
	JRST	TTYUU
	PUSHJ	PDP,NUM3
	MOVEI	U1,[ASCIZ /.	/]
	PUSHJ	PDP,PRINT
	MOVEI	P,3
	PUSHJ	PDP,LTIME		;TIME FOR THIS TRUNK
	SETZM	LTRSAV#
LTR2:	MOVE	A,PHASES(P)
	MOVE	Z,LOW(P)
	ADDM	Z,LABEL+2(A)
	ADDM	Z,TLOW
	MOVE	U2,LOW(P)
	MOVE	Z,EQUAL(P)
	ADDM	Z,LABEL+3(A)
	ADDM	Z,TEQUAL
	ADD	U2,EQUAL(P)
	MOVE	Z,HIGH(P)
	ADDM	Z,LABEL+4(A)
	ADDM	Z,THIGH
	ADD	U2,HIGH(P)
	ADDM	U2,LTRSAV
	MOVE	U1,EQUAL(P)
	ASH	U1,-1
	ADD	U1,LOW(P)
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT3		;%L
	SETZM	LOW(P)
	SETZM	HIGH(P)
	MOVE	U1,EQUAL(P)
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT1		;%E
	SETZM	EQUAL(P)
	SOJGE	P,LTR2
	MOVE	U1,LTRSAV
	ADDM	U1,LABELD+1
	PUSHJ	PDP,RJOUT3
	MOVE	U2,THIGH
	ADD	U2,TEQUAL
	ADD	U2,TLOW
	MOVE	U1,TEQUAL
	ASH	U1,-1
	ADD	U1,TLOW
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT3		;%TL
	MOVE	U1,TEQUAL
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT1		;%TE
	PUSHJ	PDP,TERPRI
	SKIPE	RFLAG
	PUSHJ	PDP,TAB1P	;ON PAGE 5
UPTAB:	SETZM	THIGH
	SETZM	TLOW
	SETZM	TEQUAL
	PUSHJ	PDP,LINEAR
UPTAB2:	MOVE	U1,TRNKNO
	TRNE	U1,3
	JRST	TTYUU
	TRNN	U1,777
	JRST	.+3
	PUSHJ	PDP,DIVIDT
	PUSHJ	PDP,DSAVE
	JRST	TTYUU
;TTYUU LCONTS LCONTZ LLSTOP LSTOP LCONT LMOVE UPDTSC LMOVE1 LMOVE2

TTYUU:	TTYUUO	2,U2
	JRST	LCONT
	PUSH	PDP,[EXP TTYUU]
	CAIE	U2,"R"
	JRST	.+3
	SOS	RFLAG#
	POPJ	PDP,
	CAIE	U2,"F"
	JRST	.+3
	SETOM	LFLAGT#
	POPJ	PDP,
	CAIN	U2,"T"
	JRST	TOTALS
		;EXTRA COMMANDS GO IN HERE
	POP	PDP,
	JRST	COMEND+5
LCONTS:	SKIPE	LCONTF
	JRST	LCONT
LCONTZ:	SETZM	MGIBUF
	SETOM	LCONTF
	SETOM	TRNKNO
	MOVEI	U1,1
	MOVEM	U1,SI
	PUSHJ	PDP,DSKINI
	JRST	BEGIN3		;EXTRA INSTRUCTION NEEDED
	PUSHJ	PDP,DSKIN2		; 4 APR 80 
	JRST	BEGIN3
	JRST	BEGIN3

LLSTOP:	AOS	U1,TRNKNO
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ / IS THE NEXT TRUNK TO READ/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /TYPE SAVE TO SAVE/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	BEGIN
LSTOP:	PUSHJ	PDP,MAGIN	;GET NEXT CHAR. TO PRINT
	JRST	.+4		;NO MORE CHARACTERS, SO UPDATE EVAL TABLES
	MOVE	X1,U1		;PUT CHAR. IN X1 FOR TYO
	PUSHJ	PDP,TYO		;PRINT CHAR.
	JRST	LSTOP		;DO IT AGAIN
	SETZM	COUNT
	JRST	UPTAB

LCONT:	SKIPE	BOLFLG
	JRST	BOLAND
	SKIPE	TRUNKF
	PUSHJ	PDP,COMM
	MOVSI	A,377360	;LEARN SOME MORE FROM STARTING BOARD
	MOVEM	A,TA		;GET INITIAL BOARD FOR THIS TRUNK
	MOVEI	P,17377
	MOVEM	P,TP
	SETZB	X2,TK
	SETZM	COLOR
	SETOM	X4VAR		;TO COUNT VARIATION BOARDS
	JRST	BEGIN2		;GO GET MOVES NOW

LMOVE:	PUSHJ	PDP,MAGIN	;INPUT CHARACTERS FOR BKOK MOVE
	JRST	ENDERR		;EOF FOUND, NOT EXPECTED HERE
	CAIN	U1,12		;A LINE FEED?
	JRST	LFSTRT		;YES
	CAIE	U1,15		;IS IT A CR
	CAIN	U1," "		;A SPACE?
	JRST	LMOVE		;YES, SO TRY AGAIN
	SKIPE	LRNJMP		;TEST IF JUMP
	JRST	LMOVE1		;LAST MOVE WAS A JUMP
UPDTSC:	SKIPGE	A,BEST
	JRST	LMOVE1		;DO NOT SCORE THIS MOVE
	MOVE	K,SI		;MOVE INDEX
	MOVE	P,PHASE		;PHASE IN P
	MOVE	X3,S(A)		;EVAL SCORE FOR BOOK MOVE
	CAMN	K,A
	SOJLE	K,LMOVE1
	CAMGE	X3,S(K)		;IS IT THE BEST SCORE?
	AOS	HIGH(P)		;H COUNT (ADD 1 FOR EVERY SCORE > BEST)
	CAMN	X3,S(K)
	AOS	EQUAL(P)		;E COUNT
	CAMLE	X3,S(K)
	AOS	LOW(P)		;L COUNT (ADD 1 FOR EVERY SCORE < OR = BEST)
	PUSHJ	PDP,TAB1E	;ON PAGE 2
	SOJG	K,UPDTSC+3
LMOVE1:	SETZM	NNNONO#

	CAIGE	U1,50		;DO WE PRINT IT?
	JRST	.+3		;SPECIAL FOR CKLY
	CAIG	U1,71
	JRST	LMOVE2
	MOVE	X1,U1
	PUSHJ	PDP,TYO
	PUSHJ	PDP,MAGOUT
	CAIN	U1,"%"		;A BAD MOVE
	JRST	NONONO
	CAIN	U1,"="		;ONLY FAIR MOVE
	JRST	NOGOOD
	CAIN	U1,"'"		;BEST MOVE
	JRST	BSTMOV
LMOVE2:	SETZM	SI
	MOVE	A,TA		;GET LAST BOARD
	MOVE	P,TP
	MOVE	K,TK
	MOVEM	A,PLA		;STORE BOARD FOR FUTURE PUPPING
	MOVEM	P,PLP
	MOVEM	K,PLK
	SETZB	X3,LXF		;ZERO INDEX & LEGAL BOOK MOVE FLAG
	AOS	X2		;INCREMENT MOVE POINTER
	CAIN	U1,"X"		;IS IT AN "X"
	JRST	XCODE		;YES
	CAIN	U1,"*"		;A STAR?
	JRST	LA1		;YES
	CAIL	U1,60		;IS IT A NUMBER?
	CAILE	U1,71		;IT IS IF 57 < U1 < 72.
	SOJA	X2,BEGIN2	;NOT A NUMBER, PROBABLY A <CR>
	PUSHJ	PDP,NOSTO+2	;A NUMBER, SO DON'T SAVE BOARD
	JRST	LA4
;NOGOOD BSTMOV NONONO KEAR. KEAR.0 KEAR.2 KEAR.3 LA1 BDSTOR LA4 LA4A LA4B

NOGOOD:	SETOM	NNNONO
	JRST	.+3
BSTMOV:	MOVEI	Z,1		;FOR DOUBLE CREDIT LATER
	MOVEM	Z,NNNONO
	PUSHJ	PDP,MAGIN
	HALT
	JRST	LMOVE2
NONONO:	MOVE	U1,COLOR
	ADDI	U1,1
	MOVEM	U1,WHOWON	;1 WHITE WINS, 2 BLACK WINS
	JRST	.-6

KEAR.:	PUSHJ	PDP,NOSTO	;GET NEXT MOVE
	MOVE	U3,LPOINT
	ANDI	U3,37777
	LSH	U3,16		;GET IN POSITION
KEAR.0:	PUSHJ	PDP,MAGIN
	HALT
	MOVE	U2,U1
	PUSHJ	PDP,MAGIN
	HALT
	CAIN	U1,15		;NOT A CR
	JRST	KEAR.2
	CAIE	U1," "
	CAIN	U1,"+"
	JRST	KEAR.2		;SINGLE CHARACTER CASE
	LSH	U2,7
	IOR	U2,U1
	PUSHJ	PDP,MAGIN
	HALT
	JRST	KEAR.3

KEAR.2:	CAIL	U2,60		;TEST FOR LETTER OR NUMBER
	CAILE	U2,71
	JRST	.+3
	ADDI	U2,14000	;ADD LEADING 0
	JRST	.+3
	LSH	U2,7
	ADDI	U2,60		;ADD TRAILING 0
KEAR.3:	IOR	U2,U3
	PUSHJ	PDP,BDSTOR
	CAIE	U1," "		;NOT A SPACE
	CAIN	U1,15		;NOT A CR
	JRST	LA4		;WE ARE THROUGH
	CAIN	U1,"+"
	JRST	KEAR.0	;SAVE AGAIN
	JRST	LA4

LA1:	SKIPE	KEAR		;WHICH DATA IS BEING PROCESSED?
	JRST	KEAR.		;KEAR DATA.
	MOVE	U2,LPOINT	;GET PRESENT BRANCH
	LSH	U2,6
	ADD	U2,X2		;ADD INDEX WITHIN THIS BRANCH
BDSTOR:	AOS	X4,X4VAR	;INDEX TO NEXT SPACE
	MOVEM	U2,ME(X4)	;STORE THE BOARD
	MOVEM	A,MA(X4)
	MOVEM	P,MP(X4)
	SKIPE	COLOR		;RIGHTMOST GUARD BIT IS COLOR
	TRO	K,400
	MOVEM	K,MK(X4)
	TRZ	K,400		;ZERO BIT (IT MIGHT NEED IT)
	MOVE	Z,WHOWON
	HRL	Z,WINLOS	;SAVE DISTANCE TO WIN OR LOSS
	MOVEM	Z,MWL(X4)	;SAVE WHOWON FLAG
	SKIPE	KEAR
	POPJ	PDP,		;KEAR WANTS RETURN
	AOSE	DWFLAG		;IT'S -1 ONLY WHEN COMING FROM XCODE
	PUSHJ	PDP,NOSTO	;GET BOOK MOVE
LA4:	PUSHJ	PDP,PHASEV	;COMPUTE INITIAL PHASE
	MOVE	U1,PHASES(U5)
	MOVEM	U1,PHASAD	;FOR USE IN EVA
	SETZB	X3,LRNJMP#	;ASSUME NORMAL MOVE
	SETZM	STOP		;WIPE SLATE CLEAN
	PUSHJ	PDP,LEGALY	;NOW GET ALL TRUNKS
	JRST	NOMOV		;NO LEGAL MOVES
	JRST	.+2		;DEPEND ON X4NORM FOR SINGLE MOVE DETECT
	AOS	U1,STOP		;BIT 35 USED FOR X3=0 CASE
	PUSHJ	PDP,LEGM	;SPECIAL FOR CKLY***
	PUSHJ	PDP,X4NORM
	MOVE	Z,X4ALL
	TRNN	Z,16
	JRST	LA4JJ		;MAY BE FORKED
LA4A:	SKIPN	U1,WHOWON
	JRST	LA4B	;OK TO GO ON
	SUBI	U1,1
	CAMN	U1,COLOR
	JRST	LA4J		;DO NOT LEARN
LA4B:	SKIPGE	NNNONO
	JRST	LA4J		;DO NOT LEARN
	JRST	LA4J		; CKLY INSERT
	MOVEI	X1,1
	MOVE	Z,EEB
	MOVEM	Z,EB
	MOVEM	Z,EBA
	MOVE	Z,EEB2
	MOVEM	Z,EB2
	MOVEM	Z,EBA2
	SETZM	TA		;FILLED AFTER BOOK MOVE
	SETZM	X4CNT
	SETZM	X4MOVE
	AOJA	X3,ALS2
;LA4JJ LA4J DSKINI DSKER DATAG EB EB2 EBA EBA2

LA4JJ:	SETOM	LRNJMP
	ADDI	X3,1
	MOVE	Z,PLRF-1(X3)
	MOVEM	Z,LA4RF#	;SAVE IF NEEDED
	MOVE	Z,PLLF-1(X3)
	MOVEM	Z,LA4LF#
	MOVE	Z,PLLB-1(X3)
	MOVEM	Z,LA4LB#
	MOVE	Z,PLRB-1(X3)
	MOVEM	Z,LA4RB#
	PUSHJ	PDP,PUP
	JRST	NOMOV		;ERROR SHOULD NEVER HAPPEN
	CAME	P,TP
	JRST	.+3
	MOVEM	A,TA
	MOVEM	K,TK
	PUSHJ	PDP,PUP
	JRST	LDEF		;0NLY ONE MOVE
	MOVE	Z,LA4RF
	MOVEM	Z,PLRF-1(X3)
	MOVE	Z,LA4LF
	MOVEM	Z,PLLF-1(X3)
	MOVE	Z,LA4LB
	MOVEM	Z,PLLB-1(X3)
	MOVE	Z,LA4RB
	MOVEM	Z,PLRB-1(X3)
	SETZM	LRNJMP
	SOJA	X3,LA4A

LA4J:	SETOM	LRNJMP
	SETZM	TA
	ADDI	X3,1
	PUSHJ	PDP,PUP
	JRST	LDEF
	CAME	P,TP
	JRST	.-3
	MOVEM	A,TA
	MOVEM	K,TK
	JRST	LDEF

DSKINI:	INIT	4,0
	SIXBIT	/DSK/
	XWD	MGOBUF,MGIBUF
	JRST	DSKER
	SETZM	DATAG+2
	MOVE	U1,[SIXBIT /CH4ALS/]		;Was /  2KDH/
	MOVEM	U1,DATAG+3
	LOOKUP	4,DATAG
	JRST	DSKER
	INBUF	4,11
	AOS	(PDP)
	POPJ	PDP,

DSKER:	MOVEI	U1,[ASCIZ /NO GAMES ON DSK/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	RELEAS	4,
	POPJ	PDP,

DATAG:	SIXBIT	/LEES/
	SIXBIT	//
	Z
	Z

DSKIN2:	INIT	5,0			;CKLY FIX
	SIXBIT	/DSK/
	XWD	MGOBUF,0
	JRST	DSKER2
	SETZM	DATAG2+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,DATAG2+3
	ENTER	5,DATAG2
	JRST	DSKER2
	OUTBUF	5,11
	AOS	(PDP)
	POPJ	PDP,

FRMBUF:	BLOCK	3

DSKER2:	MOVEI	U1,[ASCIZ /COULD NOT ENTER FORM.DAT/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	RELEAS	5,
	POPJ	PDP,

DATAG2:	SIXBIT	/FORM/
	SIXBIT	/DAT/
	Z
	Z

	Z		;GUARD
EB:	BLOCK	20
	Z
EB2:	BLOCK	20
EBA:	Z
EBA2:	Z
;ALS1 ALS1B ALS1A ALS2 ALS3

ALS1:	MOVE	Z,EB+2
	MOVEM	Z,EEB
	MOVE	Z,EB+1
	MOVEM	Z,EEB+1
	MOVE	Z,EB2+2
	MOVEM	Z,EEB2
	MOVE	Z,EB2+1
	MOVEM	Z,EEB2+1
ALS1B:	MOVEI	X1,1		;FOR NON-BOOK MOVES
	SKIPE	LXF
	HRLZ	X1,X4ALL	;TO LEFT HALF FOR BOOK MOVES
	LSH X1,1		;TEMPORARY FIX TO TEST
	SKIPLE	NNNONO
	LSH	X1,1		;MULTIPLY BY TWO FOR WIN
	PUSHJ	PDP,LEV1	;EVALUATE AND LEARN ON BACKED UP VALUES
	ADDM	X1,SIGLF(U5)	;UPDATE FINAL TABLE

;	SUB U5,PHASAD		;Insert for SYM smoothing in situ
;	MOVNS U5
;	ADD U5,PHASAD
;	MOVSS X1
;	ADDM X1,SIGLF(U5)

	AOS	U2,SI
	MOVEM	Z,S(U2)
	SKIPE	LXF
	MOVEM	U2,BEST
ALS1A:	MOVE	Z,EBA
	MOVEM	Z,EB		;OLD VALUE MAY HAVE BEEN BLASTED
	MOVEM	Z,EEB
	MOVE	Z,EBA2
	MOVEM	Z,EB2
	MOVEM	Z,EEB2
	MOVE	Z,EEB-1
	MOVEM	Z,EEB+1
	MOVE	Z,EEB2-1
	MOVEM	Z,EEB2+1
ALS2:	MOVEI	X3,1		;SAFETY MEASURE
	MOVE	Z,LOSE		;RESET FOR EACH NEW BRANCH
	MOVEM	Z,ZZ-1
	MOVEM	Z,ZZ
	SETZM	LXF
	PUSHJ	PDP,PUP
	JRST	LDEF		;LAST BRANCH PROCESSED
	SETZM	EVFLAG#
	AOS	X4CNT		;COUNT OF MOVES
	CAME	P,TP		;IS THIS THE BOOK MOVE
	JRST	ALS3		;NO
	MOVEM	A,TA		;SAVE UPDATED BOARD
	MOVEM	K,TK
	SETOM	LXF		;SET FLAG
	MOVE	U1,X4CNT	;GET MOVE COUNT
	SKIPE	COLOR
	MOVE	U1,X4TAB(U1)
	HRL	U1,WINLOS
	MOVEM	U1,X4MOVE
	SOSGE	WINLOS
	SETZM	WINLOS		;NEG VALUE MEANS TROUBLE
ALS3:	MOVEM	A,PLA(X3)	;PREPARE FOR EXTENSION
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	MOVE	Z,STOP
	AND	Z,STOMP(X3)	;SAVE EARLIER X3 VALUES ONLY
	MOVEM	Z,STOP
	PUSHJ	PDP,LEGAL
	JRST	ALS8
	JRST	ALS3J
	MOVE	Z,STOP
	IOR	Z,STBIT(X3)	;RECORD THIS NON-JUMP MOVE
	MOVEM	Z,STOP
	CAMGE	X3,LDEPTH
	AOJA	X3,ALS5		;GO DEEPER
	AND	Z,STTEST(X3)	;IS OTHER SIDE EVALUATED
	JUMPN	Z,ALS3A		;YES SO DO FULL EVA
	CAMGE	X3,KDEPTH	;MUST WE STOP ANYWAY
	AOJA	X3,ALS5		;NO
	JRST	ALS3A		;DO THE BEST WE CAN
;ALS3J ALS3A ALS3B ALS4 ALS5 ALS6 ALS7 ALS8

ALS3J:	CAIGE	X3,17		;SPACE LIMIT

	AOJA	X3,ALS4
	SKIPN	LXF		;IS THIS THE BOOK MOVE
	JRST	ALS1A		;NO SO IGNORE THIS PART
	SETOM	BEST		;IGNORE SIGNAL
	JRST	LDEF

ALS3A:	CAIG	X3,1
	JRST	ALS1B		;LEVI IN ALS1B ADEQUATE
	SETZM	LFLAG		;DO NOT UPDATE TABLES NOW
	PUSHJ	PDP,EVA		;BUT DO EVA
ALS3B:	SETOM	LFLAG		;RESET LEARN FLAG
	MOVNS	Z
	CAMG	Z,ZZ-1(X3)
	JRST	ALS6
	MOVEM	Z,ZZ-1(X3)	;BACK SCORE
	MOVE	Z,EEB(X3)
	MOVEM	Z,EB(X3)	;ALSO BACK EV DATA
	MOVE	Z,EEB2(X3)
	MOVEM	Z,EB2(X3)
	MOVE	Z,EEB-1(X3)
	MOVEM	Z,EB-1(X3)
	MOVE	Z,EEB2-1(X3)
	MOVEM	Z,EB2-1(X3)
	JRST	ALS6		;GET NEXT BOARD AT THIS LEVEL

ALS4:	MOVE	Z,EEB-3(X3)	;ADVANCE SINCE NOT COMPUTED FOR JUMP
	MOVEM	Z,EEB-1(X3)
	MOVE	Z,EEB2-3(X3)
	MOVEM	Z,EEB2-1(X3)
ALS5:	MOVE	Z,ZZ-3(X3)
	MOVEM	Z,ZZ-1(X3)
ALS6:	PUSHJ	PDP,PUP		;GET NEXT BOARD
	JRST	ALS7
	JRST	ALS3

ALS7:	CAIG	X3,2		;BACKING FROM WHERE
	SOJA	X3,ALS1		;TIME TO UPDATE TABLES
	MOVN	Z,ZZ-1(X3)	;NORMAL BACK UP
	CAMG	Z,ZZ-2(X3)
	SOJA	X3,ALS6		;GET NEXT BOARD
	MOVEM	Z,ZZ-2(X3)
	MOVE	Z,EB(X3)
	MOVEM	Z,EB-2(X3)
	MOVE	Z,EB2(X3)
	MOVEM	Z,EB2-2(X3)
	SOJA	X3,ALS6

ALS8:	MOVE	Z,LOSE
	JRST	ALS3B
;LDEF LDEFA FORGIV LOC LOC1 XCODE XCODE0 LA2 BM LA3

LDEF:	MOVE	Z,EBA		;NEXT MOVE PROTECTION
	MOVEM	Z,EEB-1
	MOVE	Z,EBA2
	MOVEM	Z,EEB2-1
	MOVEI	X3,1
	XORM	X3,COLOR	;CHANGE COLOR
	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	JRST	ENDERR		;EOF NOT EXPECETED HERE
	CAIN	U1,"/"		;A "/"?
	SOJA	X2,.-3		;YES, SO DON'T COUNT THIS LAST MOVE
	SKIPN	TA		;TA NOT = 0 IF BOOK MOVE WAS FOUND
	JRST	FORGIV-1	;TA NOT ZERO IF BOOK MOVE FOUND
	SKIPN	LRNJMP		;SINGLE JUMPS NOT STORED
	SKIPN	USEBOK		;ARE WE SAVING ROTE
	JRST	LMOVE+2		;NO
	MOVEM	U1,U1S#
	SKIPN	WINLOS
	JRST	LDEFA		;NO WINLOS GIVEN
	MOVE	U1,WHOWON
	JUMPE	U1,LDEFA	;NO WHOWON DATA
	ADD	U1,COLOR	;NOTE COLOR ALREADY UPDATED
	ADD	U1,WINLOS	;ALSO ALREADY CHANGED
	TRNN	U1,1
	AOS	U1,WINLOS	;CORECT VALUE TO AGREE
	HRLM	U1,X4MOVE	;FIX X4MOVE
	TRNE	U1,1
	JRST	.+3
LDEFA:	SKIPL	NNNONO		;IS THIS LESS THAN BEST
	PUSHJ	PDP,SAVMOV	;NOW SAVE BOARD
	MOVE	U1,U1S
	JRST	LMOVE+2

	MOVEI	U1,[ASCIZ /ILLEGAL BOOK MOVE /]
FORGIV:	MOVEM	U1,ERRMES#
	PUSHJ	PDP,MAGIN	;SEE IF WE CAN FORGIVE THIS BOOK MOVE ERROR
	JRST	ENDERR
	CAIE	U1,15		;CR?
	JRST	.+10
	PUSHJ	PDP,NEWLIN	;YES, SO GET NEW LINE
	JRST	ENDERR
	CAIN	U1," "
	JRST	LBRNCH
	CAIE	U1,"&"
	CAIN	U1,"#"
	JRST	LTR
	CAIE	U1,"*"
	JRST	FORGIV+1
LOC:	MOVE	U1,ERRMES
	PUSHJ	PDP,PRINT
	MOVEM	X2,SAVX2
	MOVE	U1,LPOINT	;PRINT CURRENT VARIATION POINTER
	SETZ	X2,
	JUMPE	U1,.+3
	LSHC	U1,-7
	JUMPN	U1,.-1
	MOVEM	X2,ASCPNT#
	MOVEI	U1,ASCPNT
	PUSHJ	PDP,PRINT
	MOVEI	U1,[ASCIZ / MOVE /]
	PUSHJ	PDP,PRINT
	MOVE	U1,SAVX2	;PRINT NUMBER OF MOVES WITHIN THIS VARIATION
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
LOC1:	PUSHJ	PDP,NEWLIN	;FIND TRUNK CARD
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	CAIN	U1,"#"		;TRUNK CARD?
	JRST	LTR		;YES, SO GO TO LTR
	CAIN	U1,"&"		;A BOLAND HEADER CARD
	JRST	LTR		;YES
	JRST	.-6		;NO, SO GET NEXT CARD
XCODE:	PUSHJ	PDP,MAGIN	;SKIP OVER BLANK
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	CAIN	U1,"/"		;A "/"?
	SOJA	X2,XCODE	;YES, SO DON'T COUNT "X" & GET NEXT CHAR.
XCODE0:	PUSHJ	PDP,MAGIN	;GET NEXT CHARACTER
	JRST	ENDERR		;EOF FOUND, BUT NOT EXPECTED
	CAIN	U1," "		;A SPACE?
	JRST	XCODE0		;YES, SO TRY AGAIN
	CAIE	U1,15		;A <CR>?
	JRST	.+3
	PUSHJ	PDP,NEWLIN	;YES, SO GET NEW LINE
	JRST	ENDERR
	CAIGE	U1,72		;IS IT A DIGIT?
	CAIGE	U1,60		;IT IS IF 57 < U1 < 71.
	CAIN	U1,"*"		;NOT A NUMBER, SO IS IT A "*"?
	AOSA	X2		;IT IS A NUMBER OR A STAR
	JRST	BEGIN2+2	;NO MOVES FOLLOW "X"
	CAIE	U1,"*"		;IS IT A STAR?
	JRST	.+4		;NO
	SETOM	DWFLAG		;YES, SO SET FLAG
	PUSHJ	PDP,NOSTO
	SKIPA
	PUSHJ	PDP,NOSTO+2	;GET BOOK MOVE   
LA2:				;PUSHJ	PDP,FIXX DID NOT WORK HERE
	PUSHJ	PDP,LEGAL	;START LOOKING FOR MOVES
	JRST	NOMOVE		;NO LEGAL MOVES, SO GO TO ERROR ROUTINE
	AOSA	X3
	ADDI	X3,1
	CAIN	X3,1		;FIRST TIME THRU?
	JRST	LA3		;YES, SO WE KNOW THIS IS NOT THE BOOK MOVE
	SKIPL	U1,U4S		;GET MOVE DELTA
	JRST	BM		;A BACKWARD MOVE
	TRNE	U1,3		;RIGHT OR LEFT?
	SKIPA	U1,PLLF-1(X3)	;LF MOVE
	MOVE	U1,PLRF-1(X3)	;RF MOVE
	JRST	.+4
BM:	TRNE	U1,3		;RIGHT OR LEFT?
	SKIPA	U1,PLRB-1(X3)	;RB MOVE
	MOVE	U1,PLLB-1(X3)	;LB MOVE
	TDNN	U1,U2SS		;AND HERE IS BOOK MOVE
	JRST	LA3		;THEY DO NOT INTERSECT
	MOVE	A,PLA-1(X3)
	MOVEM	A,TA		;STORE BOARD AFTER X HAS BEEN COMPLETED
	MOVEM	A,PLA
	MOVE	P,PLP-1(X3)
	MOVEM	P,TP
	MOVEM	P,PLP
	MOVE	K,PLK-1(X3)
	MOVEM	K,TK
	MOVEM	K,PLK
	MOVEI	U2,1		;IN CASE COLOR NEEDS CHANGING
	TRNN	X3,1		;"X" CHANGE THE ACTIVE SIDE?
	XORM	U2,COLOR	;YES
	SETZM	X3
	MOVE	U2,BKMOVE
	XOR	U2,A
	MOVEM	U2,TP		;TP NOW SET UP
	SKIPGE	DWFLAG
	JRST	LA1		;"X" FOLLOWED BY A "*"
	JRST	LA4
LA3:	PUSHJ	PDP,PUP
	SOJA	X3,.-1		;BACK UP IF THIS LEVEL IS EXHAUSTED
	MOVEM	A,PLA(X3)	;FOR FUTURE PUP'S
	MOVEM	P,PLP(X3)
	MOVEM	K,PLK(X3)
	CAIL	X3,12		;SHOULD WE GO DEEPER?
	JRST	LA3		;NO, BACK-UP
	JRST	LA2		;YES
;BBRNCH KBRNCH KBRNC2 KBRNC3 KBRNC4 KBRNC5 KBRNC6 LBRNCH LUL LUPE LDO LHERE

BBRNCH:	PUSHJ	PDP,MAGIN
	HALT
	CAIE	U1,11		;LOOK FOR A TAB
	JRST	.-3
	JRST	KBRNC2		;KEAR ROUTINE OK NOW

KBRNCH:	MOVEI	U2,↑D21
	PUSHJ	PDP,MAGIN	;GET 23RD CHAR.
	HALT
	SOJG	U2,.-2
KBRNC2:	PUSHJ	PDP,MAGIN	;THIS IS 23RD CHAR.
	HALT
	MOVE	U3,U1
	PUSHJ	PDP,MAGIN	;GET NEXT CHAR.
	HALT
	CAIN	U1,15
	JRST	LDO+4
	CAIE	U1,11
	CAIN	U1," "
	JRST	KBRNC3
	LSH	U3,7		;MOVE FIRST CHAR. OVER
	IOR	U3,U1		;AND PUT IN SECOND CHAR.
	JRST	KBRNC4

KBRNC3:	CAIL	U3,60
	CAILE	U3,71
	JRST	.+3
	ADDI	U3,14000
	JRST	.+3
	LSH	U3,7
	ADDI	U3,60
KBRNC4:	MOVEM	U3,LPOINT	;STORE VAR. POINTER
	PUSHJ	PDP,MAGIN	;GET NEXT NON-SPACE CHAR.
	HALT
	CAIN	U1,15		;WAS CHARACTER A CR
	JRST	LDO+4		;AN ERROR
	CAIE	U1,11		;IS IT A TAB
	CAIN	U1," "		;IS IT A SPACE
	JRST	.-6		;LAST CHAR. WAS A SPACE OR TAB
	MOVE	A,U1
	PUSHJ	PDP,MAGIN
	HALT
	CAIE	U1,15
	JRST	KBRNC5
	CAIL	A,60
	CAILE	U1,71
	JRST	.+3
	ADDI	A,14000
	JRST	.+3
	LSH	A,7
	ADDI	A,60
	JRST	KBRNC6

KBRNC5:	LSH	A,7
	IOR	A,U1
KBRNC6:	LSH	A,16
	IOR	U3,A
	JRST	LDO+4		;NOW GO FIND MATCH

LBRNCH:	
	MOVEI	U1,[ASCIZ /VARIATION /]
	PUSHJ	PDP,PRINT
	SETZM	MOVNUM 
	SKIPE	PRNVAR
	JRST	LOC1
	SETZB	X2,U3		;ZERO MOVE POINTER
	SKIPE	BOLFLG
	JRST	BBRNCH		;BOLAND FORMAT USED
	SKIPE	KEAR		;KEAR DATA?
	JRST	KBRNCH		;YES
	MOVEI	U2,↑D35		;GET TO CHAR. #37
	PUSHJ	PDP,MAGIN	;GET CHAR.
	JRST	ENDERR
	PUSHJ	PDP,MAGOUT	; CKLY
	SOJG	U2,.-3		;JUMP IF NOT CHAR. #36
LUL:	SETZM	U2
LUPE:	PUSHJ	PDP,MAGIN	;GET CHAR. FROM INPUT BUFFER
	JRST	ENDERR		;EOF NOT EXPECTED HERE
	CAIGE	U1,72		;IS CHAR. A DIGIT?
	CAIGE	U1,60		;IT IS IF 57 < U1 < 72.
	JRST	LDO		;NO
	MOVE	X1,U1
	PUSHJ	PDP,TYO  	;CKLY FIX
	PUSHJ	PDP,MAGOUT	; CKLY
	IMULI	U2,12
	ADD	U2,U1
	SUBI	U2,60
	JRST	LUPE
LDO:	LSH	U3,6		;SAVE LAST NUMBER
	ADD	U3,U2
	CAIN	U1," "		;ARE WE THROUGH?
	JRST	.+5
	PUSHJ	PDP,MAGOUT	; CKLY 
	MOVEI	U1,[ASCIZ /,/]
	PUSHJ	PDP,PRINT
	JRST	LUL		;NO
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEM	U3,LPOINT	;STORE THIS BRANCH NUMBER
	MOVE	U2,X4VAR	;X4VAR IS NUMBER OF SAVED BOARDS
	CAMN	U3,ME(U2)	;LOOK FOR PROPER TABLE ENTRY
	JRST	LHERE		;FOUND IT
	SOJGE	U2,.-2		;KEEP LOOKING
	TDZA	U3,.+1		;NO MATCH, SO VAR. POINTER ERROR?
	777777740000
	MOVE	U2,X4VAR		;TRY AGAIN, THIS TIME WITH VAR. MASKED OUT
	MOVE	U1,ME(U2)
	TRZ	U1,740000
	CAIN	U3,(U1)		;ARE MOVE POINTERS EQUAL?
	JRST	LHERE		;YES, SO THIS IS THE ONE WE WANT, WE HOPE
	SOJGE	U2,.-4
	MOVEI	U1,[ASCIZ /BAD TRUNK  /]
	JRST	FORGIV
LHERE:	MOVE	A,MA(U2)	;GET THE BOARD
	MOVEM	A,TA		;PUT IT IN PROPER PLACE
	MOVE	P,MP(U2)
	MOVEM	P,TP
	MOVE	K,MK(U2)
	SETZM	COLOR
	TRZE	K,400		;BIT 27 OF K HAS COLOR
	AOS	COLOR
	MOVEM	K,TK
	MOVE	U1,MWL(U2)
	HRRZM	U1,WHOWON
	HLRZM	U1,WINLOS
	PUSHJ	PDP,BOUT
	PUSHJ	PDP,BDOUT
	JRST	BEGIN2		;NOW START LEARNING
;NOMOV NOMOVE ENDERR LERR NOSTO STOP STOMP STTEST STBIT


NOMOV:	MOVEI	U1,[ASCIZ /"LMOVE" ERROR: NO LEGAL MOVES /]
	JRST	FORGIV

NOMOVE:	MOVEI	U1,[ASCIZ /"X" ERROR: NO LEGAL MOVES /]
	JRST	FORGIV

ENDERR:	MOVEI	U1,[ASCIZ /EOF FOUND, BUT NOT EXPECTED /]
	JRST	FORGIV

LERR:	MOVE	U2,U1
	MOVEI	U1,[ASCIZ /LEARNING OVERFLOW/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	MOVE	U1,U2
	JRST	X4VAR

MAGOU2:	MOVE	X1,U1
MAGOU3:	IDIVI	X1,12
	JUMPE	X1,.+6
	MOVEM	U1,UEXYZ#
	MOVE	U1,X1
	ADDI	U1,"0"
	PUSHJ	PDP,MAGOUT
	MOVE	U1,UEXYZ
	ADDI	U1,"0"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

NOSTO:	PUSHJ	PDP,MAGIN	;GET FIRST NUMBER
	JRST	ENDERR		;EOF IS NOT AN ACCEPTABLE NUMBER
	MOVE	U2,U1
	AOS	X1,MOVNUM	;SPECIAL FOR CKLY
	PUSHJ	PDP,MAGOU3
	MOVE	U1,MOVNUM
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /	/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,11
	PUSHJ	PDP,MAGOUT
	MOVE	X1,U2
	PUSHJ	PDP,TYO		; SPECIAL FOR CKLY
	MOVE	U1,U2
	PUSHJ	PDP,MAGOUT
	IMULI	U2,12
	PUSHJ	PDP,MAGIN	;GET SECOND NUMBER
	JRST	ENDERR
	MOVE	X1,U1
	PUSHJ	PDP,TYO		;SPECIAL FOR CKLY
	PUSHJ	PDP,MAGOUT
	ADD	U1,U2
	SUBI	U1,1020		;NORMALIZE FOR ASCII CODE
	PUSHJ	PDP,OUTIN
	MOVE	U4,U1
	MOVNS	U1
	MOVSI	U3,400000
	LSH	U3,(U1)		;CREATE PROPER BIT POSITION
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,55
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,MAGIN	;SAME ROUTINE AS ABOVE
	JRST	ENDERR
	MOVE	X1,U1
	PUSHJ	PDP,TYO		;SPECIAL FOR CKLY
	MOVE	U2,U1
	PUSHJ	PDP,MAGOUT
	IMULI	U2,12
	PUSHJ	PDP,MAGIN
	JRST	ENDERR
	MOVE	X1,U1
	PUSHJ	PDP,TYO		;SPECIAL FOR CKLY
	PUSHJ	PDP,MAGOUT
	ADD	U1,U2
	SUBI	U1,1020
	PUSHJ	PDP,OUTIN
	SUB	U4,U1		;U4 IS MOVE DELTA
	MOVM	U5,U4
	MOVNS	U1
	MOVSI	U2,400000
	LSH	U2,(U1)		;U3-U2 IS MOVE
	MOVEM	U3,U2SS		;SOURCE BIT
	MOVEM	U4,U4S		;MOVE DELTA
	IOR	U2,U3
	MOVEM	U2,BKMOVE	;SAVE FOR ROTE
	XOR	U2,A
	MOVEM	U2,TP		;BOOK MOVE TO VERIFY
	MOVEI	U1,[ASCIZ /	/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,11
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

STOP:	Z		;STOP LOOK AHEAD WORD

STOMP:	0		;CLEAN UP STOP
	1		;INDEXED BY X3
	3
	7
	17
	37
	77
	177

STTEST:	0		;TO TEST OTHER SIDE EVAL
	1		;INDEXED BY X3
	2
	5
	12
	25
	52
	125

STBIT:	1		;NORMAL MOVE INDICATORS FOR STOP WORD
	2		;INDEXED BY X3
	4
	10
	20
	40
	100
	200

;LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L13 L14 L14N

;MACRO USED INL25B
DEFINE	TAB	(T)	<;TABLE COEF. MACRO
	SETZ	X1,
	MOVE	Z,T(X1)
	PUSHJ	PDP,TRJOUT
	ADDI	X1,1
	CAIGE	X1,5
	JRST	.-4>

LINEAR:	MOVE	A,[XWD -1,LRNPDL]
	SKIPN	LFLAG1
	JRST	L1
	SKIPN	RFLAG
	JRST	.+4
	SETZM	RFLAG
	SETOM	LFLAG5
	SETOM	LFLAG6
	SKIPN	LFLAG5
	JRST	L1
	SETZ	X4,
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /LINEAR TERM COEFFICIENTS/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
L1:
	POP	A,K		;GET TABLE START
	JUMPE	K,L21A		;LAST AT THIS LEVEL
	POP	A,Q		;GET RESULT START
	MOVEI	P,3		;PHASE COUNTER
	SKIPN	LFLAG5
	JRST	L2
	REPEAT	4,<
	REPEAT	3,<	XCT	TLIST(X4)
	ADDI	X4,1
	PUSHJ	PDP,PRINT>
	PUSHJ	PDP,TERPRI
	ADDI	X4,17>
	SUBI	X4,105
L2:	MOVEI	U3,26		;ENTRIES PER TABLE
	MOVNM	U3,U3S#
	HRRM	K,L5		;FIX UP ADDRESSES
	HRRM	K,L5A
	HRRM	K,AC
	HRRM	K,AC1
	HRRM	K,L10
	HRRM	K,L10A
	HRRM	Q,L12
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,AC2
	HRRM	Q,C6
	HRRM	Q,C5
	JRST SM			;TEMPORARY TEST OF NEW ROUTINE*****
	MOVEI	X1,12
	SETZM	TRMA(X1)	;CLEAR TABLES
	SOJGE	X1,.-1
	MOVEI	X1,2
L3:	MOVEI	X2,2
L4:	MOVEI	X3,4
L5:	MOVE	Z,(U3)
	TDNN	Z,[200000,,200000]
	JRST	.+4
	LSH	Z,-1		;DIVIDE TO PREVENT OVERFLOW
	AND	Z,[177777,,177777]
L5A:	MOVEM	Z,(U3)
	ASH	Z,-1		;TO HELP OVERFLOW PROBLEM
	AND	Z,[77777,,77777]
	ADDM	Z,TRMA(X1)
	ADDM	Z,TRMB(X2)
	ADDM	Z,TRMC(X3)
	SUBI	U3,1
	SOJGE	X3,L5
	SOJGE	X2,L4
	SOJGE	X1,L3
	SKIPN	LFLAG1
	JRST	.+10
	MOVE	Z,TRMA
	ADD	Z,TRMA+2
	ADDB	Z,TRMA+1	;CAN USE TEMPORARILY
	LSH	Z,-22
	ADD	Z,TRMA+1
	ANDI	Z,777777
	MOVEM	Z,TRMAT#
	SETZM	TRMA+1		;REQUIRED BY SYMETRY
	SETZM	TRMB+1
	SETZM	TRMC+2
	MOVS	Z,TRMA
	ADDB	Z,TRMA+2
	MOVSM	Z,TRMA		;THIS ADDS THESE CORRECTLY
	SKIPE	LFLAG1		;DO WE PRINT
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMB
	ADDB	Z,TRMB+2
	MOVSM	Z,TRMB
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMC
	ADDB	Z,TRMC+4
	MOVSM	Z,TRMC
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMC+1
	ADDB	Z,TRMC+3
	MOVSM	Z,TRMC+1
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVEI	U3,26
	SETZM	CPOS#		;COUNT OF POSITIVE ENTRIES
	SETZM	CNEG#		;COUNT OF NEGATIVE ENTRIES
	MOVEI	X1,2
L7:	MOVEI	X2,2
L8:	MOVEI	X3,4
L9:	SETZ	Z,
	SKIPN	LFLAG2
	JRST	L10
	ADD	Z,TRMA(X1)
	ADD	Z,TRMB(X2)
	ADD	Z,TRMC(X3)
	TRNN	Z,400000	;TEST FOR RIGHT OVERFLOW
	TLNE	Z,200000	;TEST FOR LEFT OVERFLOW
	PUSHJ	PDP,LZ		;REPORT TROUBLE
L9A:	ASH	-6		;DIVIDE BY 64
	MOVE	U1,WEIGHT
	AND	Z,LMSKW(U1)		;PURGE UNDERFLOW
L10:	ADD	Z,(U3)
	SKIPN	LFLAG7
	JRST	L10C
	MOVN	U1,U3
L10A:	MOVS	U2,(U1)
L10B:	LSH	U2,-1
	MOVE	U1,WEIGH1
	AND	U2,LMSKW(U1)
	ADD	Z,U2
L10C:	HLRZ	U1,Z
	HRRZ	U2,Z
	JUMPE	Z,L12
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	ASH	U1,14		;MULTIPLY BY 4096
	MOVEM	X2,X2S
	IDIV	U1,U2
	MOVE	X2,X2S
	SKIPLE	U1
	AOS	CPOS		;COUNT POS ENTRIES
	SKIPGE	U1
	AOS	CNEG		;COUNT NEG ENTRIES
	SKIPE	U1		;DO NOT BOTHER WITH ZERO ENTRIES
	ADD	U1,CORADD
L12:	MOVEM	U1,(U3)
	SUBI	U3,1
	SOJGE	X3,L9
	SOJGE	X2,L8
	SOJGE	X1,L7
L13:	MOVE	X5,CPOS		;ENTRIES
	ADDI X5,1		;So that none will be missed
;	LSH	X5,-1		;DIVIDE BY 2
	IDIVI X5,3		;NOW 7 BUCKETS 
	MOVEM U5,U5SAVE#
	MOVEM	X5,CPOS		;ENTRIES PER BUCKET
;	MOVEI	U5,2		;LARGEST QUANTUM
	MOVEI	U5,3		;LARGEST QUANTUM
	SETZB	U1,U2		;SAFETY MEASURE
L14:	MOVEI	U3,26		;TO INDEX TABLE
	PUSHJ	PDP,C2P		;FIND NEXT TO FIX
	CAMN U5,U5SAVE
	AOS CPOS
	MOVE	X5,CPOS		;RESET ENTRIES
	SOJG	U5,L14
	MOVE	X5,CNEG
	ADDI X5,1		;So that none will be missed
;	LSH	X5,-1
	IDIVI X5,3		;NOW 7 BUCKETS 
	MOVEM U5,U5SAVE
	MOVEM	X5,CNEG
;	MOVEI	U5,2
	MOVEI	U5,3
	SETZB	U1,U2
L14N:	MOVEI	U3,26
	PUSHJ	PDP,C2N
	CAMN U5,U5SAVE
	AOS CNEG
	MOVE	X5,CNEG
	SOJG	U5,L14N
	SKIPE	LFLAG5
	PUSHJ	PDP,TERPRI
	ADDI	K,SIGSIZ		;FOR NEXT PHASE
	ADDI	Q,SIGSIZ
	SOJGE	P,L2		;COUNT PHASES
	SKIPN	LFLAG5
	JRST	L1
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	JRST	L1		;TO NEXT TABLE
;L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C

L21A:	SKIPN	LFLAGT
	JRST	L21
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /FIRST-LEVEL TABLE COEF./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
L21:	POP	A,K
	SKIPE	LFLAG6
	SETZM	LFLAG5
	JUMPLE	K,L31		;LAST AT THIS LEVEL
	POP	A,Q
	JUMPLE	Q,L31
	MOVEI	P,3		;T0 COUNT PHASES
L22:	SKIPN	LFLAGT
	JRST	L22A
	MOVEI	X1,16
	SETZM	TABA(X1)
	SOJGE	X1,.-1
	MOVEI	X1,6
	MOVEI	X2,6
	MOVEI	X3,6
L22A:	SETZM	CPOS
	SETZM	CNEG
	HRRM	K,AC
	HRRM	K,ACZ
	HRRM	K,AC1
	HRRM	Q,AC2
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,C6
	HRRM	Q,C5
	MOVEI	U3,253		;COUNT ENTRIES
	MOVNM	U3,U3S
	JRST SM20		;For full smoothing
AC:	MOVE	Z,(U3)
	TDNN	Z,[200000200000]
	JRST	.+4
	LSH	Z,-1
	AND	Z,[177777177777]
ACZ:	MOVEM	Z,(U3)
	SKIPN	LFLAGT
	JRST	.+11
	ADDM	Z,TABA(X1)
	ADDM	Z,TABB(X2)
	ADDM	Z,TABC(X3)
	SOJGE	X3,.+5
	SOJGE	X2,.+3
	SUBI	X1,1
	MOVEI	X2,4
	MOVEI	X3,4
	SKIPN	LFLAG8
	JRST	AC3A
	MOVN	U1,U3
AC1:	MOVS	U2,(U1)
AC3:	LSH	U2,-1
	MOVE	U1,WEIGH2
	AND	U2,LMSKW(U1)
	ADD	Z,U2
AC3A:	HLRZ	U1,Z
	HRRZ	U2,Z
	JUMPE	Z,AC2
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	ASH	U1,14		;PLENTY OF SPREAD
	MOVEM	X2,X2SAC#
	IDIV	U1,U2
	MOVE	X2,X2SAC
	SKIPLE	U1
	AOS	CPOS
	SKIPGE	U1
	AOS	CNEG
	SKIPE	U1
	ADD	U1,CORADD
AC2:	MOVEM	U1,(U3)
	SUBI	U3,1
	CAML	U3,U3S
	JRST	AC
L23:	MOVE	X5,CPOS
	ADDI X5,1		;Allows one less in 1 bucket
	IDIVI	X5,7
	MOVEM U5,U5SAVE#	;The remainder
	MOVEM	X5,CPOS
	MOVEI	U5,7
	SETZB	U1,U2		;SAFETY MEASURE
L25B:	MOVEI	U3,253
	PUSHJ	PDP,C2P		;FIND LARGEST
	CAMN U5,U5SAVE
	AOS CPOS		;Time to start accounting for remainder
	MOVE	X5,CPOS		;RESET ENTRIES
	SOJG	U5,L25B
	MOVE	X5,CNEG
	ADDI X5,1		;Allows one less 1 in 1 bucket
	IDIVI	X5,7
	MOVEM U5,U5SAVE#	;The remainder
	MOVEM	X5,CNEG
	MOVEI	U5,7
	SETZB	U1,U2
L25BN:	MOVEI	U3,253
	PUSHJ	PDP,C2N
	CAMN U5,U5SAVE
	AOS CNEG		;Time to start accounting for remainder
	MOVE	X5,CNEG
	SOJG	U5,L25BN
	SKIPN	LFLAGT
	JRST	L25C
	MOVEM	X1,X1SL25#
	TAB	TABA
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	TAB	TABB
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	TAB	TABC
	MOVE	X1,X1SL25
	PUSHJ	PDP,TERPRI
L25C:	ADDI	K,SIGSIZ
	ADDI	Q,SIGSIZ
	SOJGE	P,L22		;TO NEXT PHASE
	SKIPE	LFLAGT
	PUSHJ	PDP,TERPRI
	JRST	L21		;TO NEXT TABLE
;TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L33 L35B L35BN

TRJOUT:	HLRZ	U1,Z
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	MOVEM	X1,X1STJ#
	MOVEM	X2,X2STJ#
	IMULI	U1,310
	IDIV	U1,U2
	TRNE	U1,1
	ADDI	U1,2
	ASH	U1,-1
	PUSHJ	PDP,RJOUT1
	MOVE	X1,X1STJ
	MOVE	X2,X2STJ
	POPJ	PDP,

L31:	MOVEI	K,SIGLF		;START THIRD LEVEL
	MOVEI	Q,SIGTF
	MOVEI	P,3
L32:	HRRM	K,L34
	HRRM	K,L34Z
	HRRM	K,L34A
	HRRM	Q,L35
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,C5
	HRRM	Q,C6
	MOVEI	U3,160
	MOVNM	U3,U3S
	SETZM	CPOS
	SETZM	CNEG
	JRST SM30		;For full smoothing
L34:	MOVE	Z,(U3)
	TDNN	Z,[200000200000]
	JRST	.+4
	LSH	Z,-1
	AND	Z,[177777177777]
L34Z:	MOVEM	Z,(U3)
	SKIPN	LFLAG9
	JRST	L34C
	MOVN	U1,U3
L34A:	MOVS	U2,(U1)
L34B:	LSH	U2,-1
	MOVE	U1,WEIGH3
	AND	U2,LMSKW(U1)
	ADD	Z,U2
L34C:	HLRZ	U1,Z
	HLRZ	U1,Z
	JUMPE	Z,L35
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	CAIGE	U2,10
	SETZ	U1,
	ASH	U1,14		;MULTIPLY BY 4096
	IDIV	U1,U2
	SKIPLE	U1
	AOS	CPOS
	SKIPGE	U1
	AOS	CNEG
	SKIPE	U1
	ADD	U1,CORADD
L35:	MOVEM	U1,(U3)
	SUBI	U3,1		;TO NEXT PHASE
	CAML	U3,U3S
	JRST	L34
L33:	SETZ	X5,
	MOVE	U5,CPOS
	SETZB	U1,U2
L35B:	MOVEI	U3,160
	PUSHJ	PDP,C2P
	SETZ	X5,
	SOJG	U5,L35B
	SETZ	X5,
	MOVE	U5,CNEG
L35BN:	MOVEI	U3,160
	PUSHJ	PDP,C2N
	SETZ	X5,
	SOJG	U5,L35BN
	ADDI	K,SIGSIZ
	ADDI	Q,SIGSIZ
	SOJGE	P,L32
	SETZM	LFLAGT		;TERMINATE F COMMAND
	POPJ	PDP,
;C2P C3P C4P C5 C2N C3N C4N C6

C2P:	MOVEI	Z,10001		;A LARGE NO.
	MOVNM	Z,LARGE#
C3P:	MOVE	Z,(U3)
	CAMGE	Z,CORADD
	JRST	C4P		;Already processed or negative
	SUB	Z,CORADD
	JUMPLE	Z,C4P
	CAMG	Z,LARGE
	JRST	.+3
	MOVEM	Z,LARGE		;SAVE IF LARGER
	MOVE	U1,U3		;SAVE INDEX
C4P:	SUBI	U3,1
	CAML	U3,U3S
	JRST	C3P
	SKIPLE	LARGE
C5:	MOVEM	U5,(U1)		;QUANTIZE
	SOSG	X5
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,

C2N:	MOVEI	Z,10001		;A LARGE NO.
	MOVEM	Z,SMALL#
C3N:	MOVE	Z,(U3)
	CAMGE	Z,CORCOM
	JRST	C4N		;ALREADY PROCESSED
	SUB	Z,CORADD
	JUMPGE	Z,C4N
	CAML	Z,SMALL
	JRST	.+3
	MOVEM	Z,SMALL		;SAVE IF SMALLER 
	MOVE	U2,U3		;SAVE INDEX
C4N:	SUBI	U3,1
	CAML	U3,U3S
	JRST	C3N
	SKIPGE	SMALL
C6:	MOVNM	U5,(U2)		;QUANTIZE
	SOSG	X5
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,
;CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL

CORCOM:	300000000000
CORADD:	377000000000

WEIGH1:	1
WEIGH2:	1
WEIGH3:	1
WEIGHT:	6
LMSKW:	777777777777
	377777377777
	177777177777
	077777077777
	037777037777
	017777017000
	007777007777
	003777003777
	001777001777
	000777000777
	000377000377
	000177000177
	000077000077
	000037000037
	000017000017
	000007000007
	000003000003
	000001000001
	000000000000
	Z
	Z
	SIGT22
	SIGL22
	SIGT21
	SIGL21
	Z
	SIGT16
	SIGL16
	SIGT15
	SIGL15
	SIGT14
	SIGL14
	SIGT13
	SIGL13
	SIGT12
	SIGL12
	SIGT11
LRNPDL:	SIGL11
;LRJOUT LZ RJOUT1 RJOUT2 RJ2A RJOUT3 LDEPTH KDEPTH LFLAG1 LFLAGZ LFLAG2 LFLAG3 LFLAG5 LFLAG6 LFLAG7 LFLAG8 LFLAG9 TRUNKF SMOOTH SMFAZE PRNVAR DORM DSKTAP TRMA TRMB TRMC TABA TABB TABC

LRJOUT:	HLRZ	U1,Z
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	MOVEM	X1,X1S
	MOVEM	X2,X2S
	IMULI	U1,310		;MULTIPLY BY 200
	SKIPN	LFLAG5
	JRST	.+6
	MOVEM	U1,U1S#
	IMULI	U1,5
	IDIV	U1,TRMAT
	PUSHJ	PDP,RJOUT3
	MOVE	U1,U1S
	IDIV	U1,U2		;WARNING DISTROYS X2
	TRNE	U1,1
	ADDI	U1,2
	ASH	U1,-1		;DIVIDE BY 2
	PUSHJ	PDP,RJOUT2
	SKIPN	LFLAG5
	JRST	.+3
	MOVE	U1,U2
	PUSHJ	PDP,RJOUT
	MOVE	X1,X1S
	MOVE	X2,X2S
	POPJ	PDP,

LZ:	MOVEM	X2,X2S
	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /TRM OVERFLOW /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X1S
	PUSHJ	PDP,NUMOUT
	MOVE	U1,X2S
	PUSHJ	PDP,NUMOUT
	MOVE	U1,X3
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVE	X1,X1S
	MOVE	X2,X2S
	POPJ	PDP,

RJOUT1:	SETZ	X2,
	SKIPGE	U1
	SOS	X2
	MOVM	Z,U1
	JRST	RJ2

RJOUT2:	SETZ	X2,
	SKIPGE	U1
	SOS	X2		;SPACE FOR - SIGN
	MOVM	Z,U1
RJ2A:	SKIPE	LFLAG5
	JRST	RJ2
	POPJ	PDP,

RJOUT3:	SETZ	X2,
	SKIPGE	U1
	SOS	X2
	MOVM	Z,U1
	JRST	RJ4

LDEPTH:	0		;LEARNING DEPTH CONTROL
KDEPTH:	3		;SECOND DEPTH CONTROL NUMBER
LFLAG1:	1		;NON-ZERO TO SAVE LINEARIZE
LFLAGZ:	1		;LINEARIZE
LFLAG2:	1		;TO LINEARIZE SIG
LFLAG3:	Z		;TO LINEARIZE LRN
LFLAG5:	Z
LFLAG6:	Z
LFLAG7:	1
LFLAG8:	1
LFLAG9:	1
TRUNKF:	0
SMOOTH:	Z
SMFAZE:	1
PRNVAR:	0
DORM:	Z		;NOT 0 TO SAVE PLOT DATA
DSKTAP:	Z		;0 FOR DSK AT START
TRMA:	BLOCK	3
TRMB:	BLOCK	3
TRMC:	BLOCK	5

TABA:	BLOCK	5
TABB:	BLOCK	5
TABC:	BLOCK	5
;TOTALS TOTAL2 SYM SYM0 SYM1 SYM2 SYM3 SYM4 SYM5 SYM6 SYM10 SYMPDL

TOTALS:	MOVEI	U1,[ASCIZ / TOTALS /]
	PUSHJ	PDP,PRINT
	MOVE	U1,LABELD+1
	IDIVI	U1,↑D1000
	PUSHJ	PDP,RJOUT1
	MOVEI	P,SIGSIZ*3
TOTAL2:	MOVE	U2,LABEL+2(P)
	ADDM	U2,TLOW
	ADD	U2,LABEL+4(P)
	ADD	U2,LABEL+3(P)
	MOVE	U1,LABEL+3(P)
	ASH	U1,-1
	ADD	U1,LABEL+2(P)
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT3
	MOVE	U1,LABEL+3(P)
	ADDM	U1,TEQUAL
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT1
	MOVE	U1,LABEL+4(P)
	ADDM	U1,THIGH
	SUBI	P,SIGSIZ
	JUMPGE	P,TOTAL2
	MOVE	U1,LABEL+1
	PUSHJ	PDP,RJOUT3
	MOVE	U2,TEQUAL
	MOVE	U1,U2
	ADD	U2,TLOW
	ADD	U2,THIGH
	ASH	U1,-1
	ADD	U1,TLOW
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT3
	MOVE	U1,TEQUAL
	IMULI	U1,144
	IDIV	U1,U2
	PUSHJ	PDP,RJOUT1
	PUSHJ	PDP,TERPRI
	SETZM	THIGH
	SETZM	TLOW
	SETZM	TEQUAL
	MOVEI	P,SIGSIZ*3
	MOVEI	U1,[ASCIZ /      MOVES /]
	PUSHJ	PDP,PRINT
	MOVE	U1,LABEL+2(P)
	ADD	U1,LABEL+3(P)
	ADD	U1,LABEL+4(P)
	PUSHJ	PDP,RJOUT
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	SUBI	P,SIGSIZ
	JUMPGE	P,.-6
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
;SUBROUTINE TO SYMETRICALLY SMOOTH LEARNING DATA
SYM:	MOVE	A,[XWD -1,SYMPDL]
SYM0:	POP	A,K
	JUMPE	K,SYM10
	POP	A,U2
	MOVEI	P,3
SYM1:	HRRM	K,SYM3
	HRRM	K,SYM4
	HRRM	K,SYM5
	HRRM	K,SYM6
	MOVE	U3,U2
SYM2:	MOVN	U1,U3
SYM3:	MOVS	Z,(U1)
SYM4:	ADD	Z,(U3)
	LSH	Z,-1
	AND	Z,LMSKW+1
SYM5:	MOVEM	Z,(U3)
SYM6:	MOVSM	Z,(U1)
	SUBI	U3,1
	JUMPGE	U3,SYM2
	ADDI	K,SIGSIZ
	SOJGE	P,SYM1
	JRST	SYM0
SYM10:	POPJ	PDP,

	Z
	Z
	160
	SIGLF
	253
	SIGL22
	253
	SIGL21
	26
	SIGL16
	26
	SIGL15
	26
	SIGL14
	26
	SIGL13
	26
	SIGL12
	26
SYMPDL:	SIGL11
;FACTOR FACTO2 FACTO3 DIVIDE DIVMSK DIVIDT

FACTOR:	SETZB	U2,U3
	MOVEI	U4,LRN11
FACTO2:	MOVEI	U1,SIGSIZ-6	;ALLOW FOR LABEL OF 5
	HRRM	U4,.+2
	HRRM	U4,.+3
	HLRZ	Z,LRN11(U1)
	ADD	U2,Z
	HRRZ	Z,LRN11(U1)
	ADD	U3,Z
	SOJGE	U1,.-4
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	FACTO2
	IMULI	U3,144
	IDIV	U3,U2
	SKIPN	TRUNKF
	JRST	.+6
	MOVEI	U1,[ASCIZ /FACTOR IS /]
	PUSHJ	PDP,PRINT
	MOVE	U1,U3
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVE	U4,LRN11
FACTO3:	MOVEI	U1,SIGSIZ-6
	HRRM	U4,.+2
	HRRM	U4,.+4
	HLLZ	U2,LRN11(U1)
	IDIVI	U2,144
	IMUL	U2,U3
	HLLM	U2,LRN11(U1)
	SOJGE	U1,.-4
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	FACTO3
	POPJ	PDP,

DIVIDE:	MOVEI	U4,LRN11
	MOVE	U2,DIVMSK
	MOVEI	U1,SIGSIZ-6
	HRRM	U4,.+2
	HRRM	U4,.+5
	MOVE	Z,LRN11(U1)
	LSH	Z,-1
	AND	Z,U2
	TDNE	Z,[777000777000]	;DO NOTHING IF SMALL
	MOVEM	Z,LRN11(U1)
	SOJGE	U1,.-5
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	.-13
	MOVEI	U1,[ASCIZ /TABLES HALVED/]
	PUSHJ	PDP,PRINT
	JRST	TERPRI
DIVMSK:	177777177777

DIVIDT:	MOVE	U2,[200000400000]
	MOVEI	U4,LRN11
	MOVEI	U1,SIGSIZ-6
	HRRM	U4,.+1
	MOVE	Z,LRN11(U1)
	AND	Z,U2
	JUMPN	Z,.+6
	SOJGE	U1,.-3
	ADDI	U4,SIGSIZ
	CAIGE	U4,LRN11+SIGSIZ*4
	JRST	.-10
	POPJ	PDP,
	MOVEI	U1,[ASCIZ /TIME TO DIVIDE/]
	PUSHJ	PDP,PRINT
	JRST	TERPRI
;LZERO ZL LC LC2 LC3 LC3A LC4 LC5 LC6 LC6A LC7 LC10 LC20

	;TYPING OF LEARN COMMAND WILL SET LFLAG AND
	;GO TO BEGIN

	;TYPING OF LEARN, ZERO, TABLES WILL ZERO ALL 
	;LEARNING TABLES AND BRANCH TO ABOVE COMMAND
	;INTERPRETATION.

LZERO:	SETZM	LABELD
	MOVE	Z,[XWD	LABELD,LABELD+1]
	BLT	Z,LABELD+SIGSIZ*4-1
	POPJ	PDP,

LZER2:	MOVEI U1,LRN21+SIGSIZ*3
	MOVEI U2,LABELD+SIGSIZ*4-1
	MOVEI U3,3
LZER2A:	HRRZI Z,1(U1)
	HRL Z,U1
	SETZM @U1
	BLT Z,@U2
	SUBI U1,SIGSIZ
	SUBI U2,SIGSIZ
	SOJGE U3,LZER2A
	POPJ PDP,

LZER3:	MOVEI U1,LRNF+SIGSIZ*3
	MOVEI U2,LABELD+SIGSIZ*4-1
	MOVEI U3,3
LZER3A:	HRRZI Z,1(U1)
	HRL Z,U1
	SETZM @U1
	BLT Z,@U2
	SUBI U1,SIGSIZ
	SUBI U2,SIGSIZ
	SOJGE U3,LZER2A
	POPJ PDP,

ZL:	MOVEI	U5,4
	SETZM	LABELD(U5)
	SETZM	LABEL(U5)
	SETZM	LABEL+SIGSIZ(U5)
	SETZM	LABEL+SIGSIZ*2(U5)
	SETZM	LABEL+SIGSIZ*3(U5)
	SOJGE	U5,.-5
	POPJ	PDP,

;THIS SHOULD BE FIXED TO WRITE OUT A FILE.*********
LC:	POPJ	PDP,		;3 APR 80 FORM BYPASS
	PUSHJ	PDP,LPTFIX
	SETCMM	LPFLAG
	MOVEI	U1,[ASCIZ /FILE NAME  # BDS   2 MVS /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	SETZM	TTNMVS	;FOR TOTALS
	SETZM	TTNBDS
	MOVEI	U2,INPSIZ-1
	SETZM	INPA(U2)
	SOJGE	U2,.-1
	MOVEI	U5,2
	MOVE	U2,[SIXBIT /MA/]
	MOVEM	U2,DSKBKE#
	MOVE	U2,[ASCIZ /MA/]
	MOVEM	U2,LC7SAE
LC2:	MOVEI	X4,14
LC3:	MOVEI	X5,20		;TO INDEX CRIP
LC3A:	MOVE	U2,DSKBKE
	MOVEM	U2,DSKBKD
	MOVE	U2,LC7SAE
	MOVEM	U2,LC7SAV
LC4:	MOVE	U2,CRIP(X4)
	LSH	U2,14
	IOR	U2,CRIP(X5)
	IOR	U2,DSKBKD
	MOVEM	U2,DSKBKM
	MOVE	U2,[SIXBIT /CHK/]
	MOVEM	U2,DSKBKM+1
	MOVE	U2,[055000000000]
	MOVEM	U2,DSKBKM+2
	MOVE	U2,[SIXBIT /  3ALS/]
	MOVEM	U2,DSKBKM+3
LC5:	LOOKUP	12,DSKBKM
	JRST	LC10		;NO FILE
	INPUT	12,BKMIN
	SETZM	TNOBDS
	SETZM	TNOMVS
	MOVEI	U4,INPSIZ/BLOWUP-2
	CAIGE	U5,2
	MOVEI	U4,INPSIZ/BLOWUP-3
LC6:	SKIPN	U3,INPP(U4)
	JRST	LC6A		;LAST LINE OF THIS FILE
	CAIGE	U5,2
	JRST	.+3
	TDNE	U3,[400400400400]	;ARE THERE TWO MOVES
	AOS	TNOMVS		;YES
	AOS	TNOBDS
LC6A:	SUBI	U4,2
	CAIGE	U5,2
	SUBI	U4,1
	JUMPGE	U4,LC6		;TEST NEXT ENTRY
LC7:	MOVEI	U1,LC7SAV
	PUSHJ	PDP,PRINT
	MOVEI	U1,LASCIZ(X4)
	PUSHJ	PDP,PRINT
	MOVEI	U1,LASCIZ(X5)
	PUSHJ	PDP,PRINT
	MOVEI	X1,11
	PUSHJ	PDP,TYO
	MOVE	U1,TNOBDS
	ADDM	U1,TTNBDS
	PUSHJ	PDP,RJOUT
	MOVEI	X1,11
	PUSHJ	PDP,TYO
	MOVE	U1,TNOMVS
	ADDM	U1,TTNMVS
	PUSHJ	PDP,RJOUT
	PUSHJ	PDP,TERPRI
	SKIPN	INPA+INPSIZ/BLOWUP-2	;MORE MINORS
	JRST	LC10		;NO
	MOVE	U2,DSKBKD
	ADD	U2,[000100000000]
	MOVEM	U2,DSKBKD
	MOVE	U2,LC7SAV
	ADD	U2,[000020000000]
	MOVEM	U2,LC7SAV
	JRST	LC4

LC10:	SOJGE	X5,LC3A
	SOJG	X4,LC3
	CAIGE	U5,2
	JRST	.+7
	PUSHJ	PDP,TERPRI
	MOVE	U2,[SIXBIT /KA/]
	MOVEM	U2,DSKBKE
	MOVE	U2,[ASCIZ /KA/]
	MOVEM	U2,LC7SAE
	SOJG	U5,LC2
LC20:	PUSHJ	PDP,TERPRI
	SETZM	FILEIN
	SETZM	DSKBKM
	SETZM	FILCHG
	MOVEI	U1,[ASCIZ /TOTALS/]
	PUSHJ	PDP,PRINT
	MOVEI	X1,11
	PUSHJ	PDP,TYO
	MOVE	U1,TTNBDS
	PUSHJ	PDP,RJOUT
	MOVEI	X1,11
	PUSHJ	PDP,TYO
	MOVE	U1,TTNMVS
	PUSHJ	PDP,RJOUT
	PUSHJ	PDP,TERPRI
	RELEAS	12,
	JRST	LPTFIX		;POPJ FROM THERE
;LC7SAV LC7SAE LASCIZ TTNMVS TTNBDS TNOBDS TNOMVS

LC7SAV:	Z		;TO SAVE ASCIZ 
LC7SAE:	Z		;DITTO

LASCIZ:	ASCIZ /00/
	ASCIZ /01/
	ASCIZ /02/
	ASCIZ /03/
	ASCIZ /04/
	ASCIZ /05/
	ASCIZ /06/
	ASCIZ /07/
	ASCIZ /08/
	ASCIZ /09/
	ASCIZ /10/
	ASCIZ /11/
	ASCIZ /12/
	ASCIZ /13/
	ASCIZ /14/
	ASCIZ /15/
	ASCIZ /16/

TTNMVS:	Z	;TOTAL NUMBER OF  2 MOVE BOARDS
TTNBDS:	Z	;TOTAL NUMBER OF BOARDS
TNOBDS:	Z	;BOARDS FOR THIS FILE
TNOMVS:	Z	;NUMBER OF TWO MOVE BOARDS

;EVA LEV1 CFC CFA1 CFA3 PHASAD PHASES NEG

	SUBTTL	MACROS FOR SIGNATURE TABLES
U1SAVE:	0
U2SAVE:	0
X1SAVE:	0


	DEFINE	MAC1	(S)	<;OUTER MACRO
		SETZ	U1,
		MAC2	\<3*S-2>
		IMULI	U1,7
		MAC2	\<3*S-1>
		IMULI	U1,7
		MAC2	\<3*S>
		ADD	U1,PHASAD
		SKIPE	LFLAG
		ADDM	X1,SIGL2'S(U1)
		ADD	U5,SIGT2'S(U1)>

	DEFINE	MAC2	(SC)	<;CENTRAL MACRO
		MAC3	1
		MOVE	U2,Q
		IMULI	U2,3
		MAC3	1
		ADD	U2,Q
		IMULI	U2,5
		MAC3	2
		ADD	U2,Q
		ADD	U2,PHASAD
		SKIPN	LFLAG
		JRST	.+5
		MOVE	Z,SIGT1'SC(U2)
		MOVE	U3,SI
		MOVEM	Z,SIGZ1'SC(U3)
		ADDM	X1,SIGL1'SC(U2)
		ADD	U1,SIGT1'SC(U2)>

	DEFINE	MAC3	(C)	<;INNER MACRO
		SETZB	Q,P
		LSHC	Q,4
		LSHC	P,4
		SUB	Q,P
		CAILE	Q,C
		MOVEI	Q,C
		CAMGE	Q,NEG+C
		MOVNI	Q,C>

EVA:	POPJ	PDP,		; CKLY
	MOVEM	X1,CFZ1	;SAVE X1
	PUSHJ	PDP,PCCNT		;COUNT PIECES
	MOVE	U4,CFLAG	;SEE WHAT KIND OF EVALUATION TO DO
	JUMPE	U4,CFA1
LEV1:	MOVE	A,EEB2(X3)
	MOVE	K,EEB2-1(X3)
	SETZ	U5,
	MAC1	1
	IMULI	U5,17
	MOVE	A,EEB(X3)
	MOVE	K,EEB-1(X3)
	MAC1	2
	ADD	U5,PHASAD
	MOVE	Z,SIGTF(U5)	;GET FINAL SCORE
	SKIPE	LFLAG
	POPJ	PDP,	;LEARNING EXIT
CFC:	ADD	Z,U3	;ADD IN PIECE-COUNT TO SCORE
	MOVE	X1,PLY(X2)	;PLY AT WHICH TIP WAS ENTERED
	ADD	X1,X3		;PLUS PLY IN TIP GIVES TRUE PLY
	SUBI	X1,40
	ASH	Z,5
	SKIPL	Z
	MOVNS	X1
	ADD	Z,X1		;ADD PLY TO SCORE
	MOVE	X1,CFZ1	;RESTORE X1 FOR RETURN
	POPJ	PDP,	;RETURN--SCORE IS LEFT IN Z
CFA1:	MOVE	Z,U3	;THIS IS ONLY EXECUTED IF CFLAG=0
	MOVE	X1,PLY(X2)
	ADD	X1,X3
	SUBI	X1,77
	SKIPL	Z
	MOVNS	X1
	ADD	Z,X1
CFA3:	MOVE	X1,CFZ1	;RESTORE X1 FOR RETURN
	POPJ	PDP,	;RETURN--SCORE IS LEFT IN Z


;SIGSIZ=1356		;SIZE OF SIG+LABEL IS 750
SIGSIZ=2406		;SIZE OF SIG+LABEL IS 1286
PHASAD:	Z

PHASES:	0
	SIGSIZ
	SIGSIZ*2
	SIGSIZ*3

NEG:	0		;NEGATION TABLE
	-1
	-2
	-3
	-4
	-5
	-6
	-7
	-10

;DSAVE RSAVE RFILL

DSAVE:	MOVEI	U1,[ASCIZ /DSAVE HERE/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,		;3 APR 80 FORM BYPASS
	INIT	7,17
	SIXBIT	/DSK/
	Z
	JRST	DSKERR
	MOVE	U1,[SIXBIT /ING/]
	MOVEM	U1,DATA+1
	MOVE	U1,[055000000000]
	MOVEM	U1,DATA+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,DATA+3
	ENTER	7,DATA
	JRST	DSKERR
	OUTPUT	7,MTAOUT
	CLOSE	7,
	MOVE	U1,[SIXBIT /SIGT0/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	ENTER	7,SIGDAT
	JRST	DSKERR
	OUTPUT	7,SIGT0
	CLOSE	7,
	MOVE	U1,[SIXBIT /SIGT1/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	ENTER	7,SIGDAT
	JRST	DSKERR
	OUTPUT	7,SIGT1
	CLOSE	7,
	MOVE	U1,[SIXBIT /SIGT2/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	ENTER	7,SIGDAT
	JRST	DSKERR
	OUTPUT	7,SIGT2
	CLOSE	7,
	MOVE	U1,[SIXBIT /SIGT3/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	ENTER	7,SIGDAT
	JRST	DSKERR
	OUTPUT	7,SIGT3
	RELEAS	7,
	MOVEI	U1,[ASCIZ /DSAVED AS LEARN.ING/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

RSAVE:	MOVEI	U1,[ASCIZ /RSAVE HERE/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,	;3 APR 80 FORM BYPASS
	INIT	7,17
	SIXBIT	/DSK/
	Z
	JRST	DSKERR
	ENTER	7,RDATA
	JRST	DSKERR
	OUTPUT	7,MTAOUT
	RELEAS	7,
	MOVEI	U1,[ASCIZ /DSAVED AS LEARN.DAT/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

RFILL:	POPJ	PDP,		;3 APR 80 FORM BYPASS
	INIT	7,17
	SIXBIT	/DSK/
	Z
	JRST	DSKERR
	LOOKUP	7,RDATA
	JRST	DSKERR
	INPUT	7,MTAOUT
	RELEAS	7,
	MOVEI	U1,[ASCIZ /FILLED FROM LEARN.DAT/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,
;DFILL DFILL2 DSKERR DATA RDATA

DFILL:	POPJ	PDP,			;3 APR 80 FORM BYPASS
	INIT	7,17
	SIXBIT	/DSK/
	Z
	JRST	DSKERR
	MOVE	U1,[SIXBIT /ING/]
	MOVEM	U1,DATA+1
	MOVE	U1,[055000000000]
	MOVEM	U1,DATA+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,DATA+3
	LOOKUP	7,DATA
	JRST	DSKERR
DFILL2:	INPUT	7,MTAOUT
	MOVE	U1,[SIXBIT /SIGT0/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	LOOKUP	7,SIGDAT
	JRST	DSKERR
	INPUT	7,SIGT0
	MOVE	U1,[SIXBIT /SIGT1/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	LOOKUP	7,SIGDAT
	JRST	DSKERR
	INPUT	7,SIGT1
	MOVE	U1,[SIXBIT /SIGT2/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	LOOKUP	7,SIGDAT
	JRST	DSKERR
	INPUT	7,SIGT2
	CLOSE	7,
	MOVE	U1,[SIXBIT /SIGT3/]
	MOVEM	U1,SIGDAT
	MOVE	U1,[SIXBIT /DAT/]
	MOVEM	U1,SIGDAT+1
	MOVE	U1,[055000000000]
	MOVEM	U1,SIGDAT+2
	MOVE	U1,[SIXBIT /  3ALS/]
	MOVEM	U1,SIGDAT+3
	LOOKUP	7,SIGDAT
	JRST	DSKERR
	INPUT	7,SIGT3
	RELEAS	7,
	MOVEI	U1,[ASCIZ /DFILLED FROM LEARN.ING/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

DSKERR:	MOVEI	U1,[ASCIZ /TRY AGAIN/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

DATA:	SIXBIT	/LEARN/
	SIXBIT	/ING/
	055000000000
	SIXBIT	/  3ALS/

RDATA:	SIXBIT	/LEARN/
	SIXBIT	/DAT/
	055000000000
	SIXBIT	/  3ALS/
;MTAOUT SIGDAT SIGT0 SIGT1 SIGT2 SIGT3 CFZ1 CFZ2 CFZ3 CFZ4 CFZ5 CFZ10 CFZ11 CEMPTY LABEL EVAL11 SIGT11 EVAL12 SIGT12 EVAL13 SIGT13 EVAL14 SIGT14 EVAL15 SIGT15 EVAL16 SIGT16 EVAL21 SIGT21 EVAL22 SIGT22 EVALF SIGTF LABELD LRN11 SIGL11 LRN12 SIGL12 LRN13 SIGL13 LRN14 SIGL14 LRN15 SIGL15 LRN16 SIGL16 LRN21 SIGL21 LRN22 SIGL22 LRNF SIGLF

MTAOUT:	IOWD	SIGSIZ*4,LABELD
	Z

SIGDAT:	SIXBIT /SIGT0/
	SIXBIT	/DAT/
	055000000000
	SIXBIT	/  3ALS/

SIGT0:	IOWD	SIGSIZ,LABEL
	Z
SIGT1:	IOWD	SIGSIZ,LABEL+SIGSIZ
	Z
SIGT2:	IOWD	SIGSIZ,LABEL+SIGSIZ*2
	Z
SIGT3:	IOWD	SIGSIZ,LABEL+SIGSIZ*3
	Z

	SUBTTL	DATA FOR EVALUATION 

CFZ1:	Z	;TEMPORARY STORAGE
CFZ2:	Z
CFZ3:	Z
CFZ4:	Z
CFZ5:	Z
CFZ10:	Z	;BACKUP LOCATION FOR PASK
CFZ11:	Z	;BACKUP LOCATION FOR ACTK
CEMPTY:	Z	;TEMPORARY LOCATION FOR EMPTY, ET.AL.

LABEL:	BLOCK	5
EVAL11:	BLOCK	26	;SIGNATURE TABLES
SIGT11:	BLOCK	27	;LABEL IS CENTERED IN TABLE TO ALLOW NEGATIVE SUBSCRIPTS
EVAL12:	BLOCK	26
SIGT12:	BLOCK	27
EVAL13:	BLOCK	26
SIGT13:	BLOCK	27
EVAL14:	BLOCK	26
SIGT14:	BLOCK	27
EVAL15:	BLOCK	26
SIGT15:	BLOCK	27
EVAL16:	BLOCK	26
SIGT16:	BLOCK	27
EVAL21:	BLOCK	253
SIGT21:	BLOCK	254
EVAL22:	BLOCK	253
SIGT22:	BLOCK	254
EVALF:	BLOCK	160
SIGTF:	BLOCK	161
	BLOCK	SIGSIZ*3		;SPACE FOR OTHER PHASES

LABELD:	BLOCK	5		;TO BALANCE LABEL
LRN11:	BLOCK	26	;LEARNING TABLES
SIGL11:	BLOCK	27
LRN12:	BLOCK	26
SIGL12:	BLOCK	27
LRN13:	BLOCK	26
SIGL13:	BLOCK	27
LRN14:	BLOCK	26
SIGL14:	BLOCK	27
LRN15:	BLOCK	26
SIGL15:	BLOCK	27
LRN16:	BLOCK	26
SIGL16:	BLOCK	27
LRN21:	BLOCK	253
SIGL21:	BLOCK	254
LRN22:	BLOCK	253
SIGL22:	BLOCK	254
LRNF:	BLOCK	160
SIGLF:	BLOCK	161
	BLOCK	SIGSIZ*3		;SPACE FOR OTHER PHASES

LABEL1=LABEL+SIGSIZ
LABEL2=LABEL+SIGSIZ*2
LABEL3=LABEL+SIGSIZ*3
LABLD1=LABELD+SIGSIZ
LABLD2=LABELD+SIGSIZ*2
LABLD3=LABELD+SIGSIZ*3

;SAVMOV SAV0

BLOWUP==10		;RELATIVE SIZE OF INPSIZ IN L AND P
INPSIZ==↑D1020*BLOWUP	;INPSIZ=↑D1020 IN CKP
BOKSIZ=↑D512		;2**N FOR CONVENIENCE

SAVMOV:	MOVE	X1,PLK
	ANDI	X1,400
	PUSHJ	PDP,NUMOUT
	POPJ	PDP,		;3 APR 80 FORM BYPASS
	AOS	X3,BINDEX
	MOVE	A,PLA
	MOVE	P,PLP
	MOVE	K,PLK
	PUSHJ	PDP,FINDFI	;GET FILE DESIGNATION
	HRLZS	U2
	HRR	U2,X3
	MOVEM	U2,BOOKI(X3)
	SKIPE	COLOR		;COLOR HAS ALREADY BEEN REVERSED
	JRST	SAV0
	PUSHJ	PDP,REVERA
	MOVEM	Z,BOOKA(X3)
	PUSHJ	PDP,REVERP
	MOVEM	Z,BOOKP(X3)
	PUSHJ	PDP,REVERK
	MOVEM	Z,BOOKK(X3)
	JRST	.+4
SAV0:	MOVEM	A,BOOKA(X3)
	MOVEM	P,BOOKP(X3)
	MOVEM	K,BOOKK(X3)
	MOVE	Z,X4MOVE
	MOVEM	Z,BOOKM(X3)
	CAIGE	X3,BOKSIZ-1
	POPJ	PDP,
	MOVEM	X2,X2MS#	;SAVE VALUES
	MOVEM	X4,X4MS#
	PUSHJ	PDP,MERGE
	MOVE	X2,X2MS		;RESTORE FORMER VALUES
	MOVE	X4,X4MS
	POPJ	PDP,
;MERGE MER0 MER1 MER2 MER3 MER4 MER5 MER6 MER7 MER8 PLACE BINDEX

MERGE:	MOVMS	PLACE
	SETOM	BINDEX
	MOVEI	Z,1
	MOVEI	X3,BOKSIZ
MER0:	SUB	X3,Z
	SKIPL	PLACE
	JRST	.+3
	CAIG	X3,BOKSIZ
	JRST	MER8
	JUMPLE	X3,MER8
	MOVE	U1,BOOKI(X3)
	CAMG	U1,BOOKI-1(X3)
	JRST	MER6
MER1:	MOVE	X1,X3
	SUB	X1,Z
	MOVEM	X3,STOP1#
	MOVEM	X3,STOP2#
	ADDM	Z,STOP2
	MOVE	U4,X1
	ADD	U4,PLACE
MER2:	CAMG	U1,BOOKI(X1)
	AOSA	X1
	AOSA	X3
	MOVE	U1,BOOKI-1(X1)
	MOVEM	U1,BOOKI(U4)
	MOVE	U1,BOOKI(X3)
	CAML	X1,STOP1
	AOJA	U4,MER4
	CAMGE	X3,STOP2
	AOJA	U4,MER2
MER3:	ADDI	U4,1
	MOVE	U1,BOOKI(X1)
	MOVEM	U1,BOOKI(U4)
	ADDI	X1,1
	CAML	X1,STOP1
	JRST	MER5
	AOJA	U4,MER3+1

MER4:	MOVE	U1,BOOKI(X3)
	MOVEM	U1,BOOKI(U4)
	ADDI	X3,1
	CAMGE	X3,STOP2
	AOJA	U4,MER4
MER5:	MOVE	X3,STOP1
	SUB	X3,Z
	JRST	MER0

MER6:	MOVEI	U2,BOOKI(X3)
	SUB	U2,Z
	HRLS	U2
	ADD	U2,PLACE
	HRRM	U2,MER7
	ADDM	Z,MER7
	ADDM	Z,MER7
	SOS	MER7
MER7:	BLT	U2,
	SUB	X3,Z
	JRST	MER0

MER8:	LSH	Z,1
	CAIL	Z,BOKSIZ
	JRST	INSERT
	MOVEI	X3,BOKSIZ
	SKIPL	PLACE
	ADD	X3,PLACE
	MOVNS	PLACE
	JRST	MER0

PLACE:	BOKSIZ
BINDEX:	-1		;SAVMOV COUNT
;INSERT INS2 INS1A INS3A INS3B INS4B INS4C INS4D INS4E INS4F INS5 INSX INS6

INSERT:	MOVEI	X4,BOKSIZ-1
INS2:	JUMPL	X4,INS6	;END OF INSERT
	HLRZ	U1,BOOKI(X4)	;GET FILE DESCRIPTOR
	SKIPL	PLACE		;IS THIS THE RIGHT ONE?
	HLRZ	U1,BOOKI+BOKSIZ(X4);GET FILE DESCRIPTOR
	CAMN	U1,FILEIN	;CORRECT FILE ALREADY IN CORE?
	JRST	INS1A		;YES
	MOVEM	U1,FILEI2	;SAVE NEW VALUE
	SKIPE	FILCHG#		;HAS FILE BEEN CHANGED
	PUSHJ	PDP,DMPFIL	;YES, SO DUMP CURRENT FILE
	PUSHJ	PDP,GETFIL	;AND GET NEW FILE
INS1A:	HRRZ	X3,BOOKI(X4)	;GET INDEX
	SKIPL	PLACE		;BUT GET THE RIGHT ONE!
	HRRZ	X3,BOOKI+BOKSIZ(X4)	;INDICES UNORDERED SINCE LABEL SORT
	SKIPN	U2,BOOKA(X3)
	JRST	INSZZ
	MOVE	U3,BOOKP(X3)
	MOVE	U4,BOOKK(X3)
	PUSHJ	PDP,FINDX1	;FIND LINE LOCATION
	JRST	INS4B		;NOT FOUND
	JUMPN	U4,INSX+1	;ONLY FIRST K MOVE SAVED
INS3A:	MOVE	Z,INPA(X1)
	AND	Z,[400400400400]
	MOVE	X2,BOOKM(X3)
	PUSHJ	PDP,INBITS
	JUMPN	Z,INS3B		;NORMAL CASE
	IORM	X2,INPA(X1)	;INSERT MOVE
	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /REPLACING 0-0 BOARD AT X3=/]
	PUSHJ	PDP,PRINT
	MOVE	U1,X3
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	MOVE	X1,X1S
	JUMPE	U4,INSX		;NON KING CASE
	HLRZ	X2,BOOKM(X3)
	LSH	X2,-4
	PUSHJ	PDP,INBITS
	IORM	X2,INPP(X1)
	HLRZ	X2,BOOKM(X3)
	ANDI	X2,17
	PUSHJ	PDP,INBITS
	IORM	X2,INPK(X1)
	JRST	INSX

INS3B:	CAMN	Z,X2
	JRST	INSX+1		;ITS A DUPLICATE
	MOVE	Z,INPP(X1)
	AND	Z,[400400400400]
	JUMPN	Z,INSX+1	;ONLY TWO MOVES SAVED
	IORM	X2,INPP(X1)
	JRST	INSX		;CORRECTION FINISHED

INS4B:	CAIL	X1,INPSIZ
	JRST	INSZ		;WOOPS FILE MUST BE FULL
	MOVEI	U4,INPSIZ-1
	MOVE	Z,BOOKK(X3)
	MOVE	X2,BOOKM(X3)	;TO INSERT MOVE INFO
	PUSHJ	PDP,INBITS
	IORM	X2,BOOKA(X3)
	JUMPE	Z,INS4E
	HLRZ	X2,BOOKM(X3)	;NOW WINLOS INFO
	JUMPE	X2,INS4C		;DRAW CASE
	LSH	X2,-4		;GET LEFT HALF
	PUSHJ	PDP,INBITS
	IORM	X2,BOOKP(X3)
	HLRZ	X2,BOOKM(X3)	;NOW RIGHT HALF
	ANDI	X2,17		;ZERO OUT LEFT 4 BITS
	PUSHJ	PDP,INBITS
	IORM	X2,BOOKK(X3)
INS4C:	SKIPN	INPA(X1)	;IS DESIGNATED LINE EMPTY
	JRST	INS5		;YES
	MOVEI	U4,INPSIZ-3
	SKIPE	INPA(U4)	;IS FILE FULL
	JRST	INSZ		;YES
	SUBI	U4,3
	SKIPN	U3,INPA(U4)
	JRST	.-2
INS4D:	CAMGE	U4,X1
	JRST	INS5
	MOVE	U3,INPA(U4)
	MOVEM	U3,INPA+3(U4)
	MOVE	U3,INPP(U4)
	MOVEM	U3,INPP+3(U4)
	MOVE	U3,INPK(U4)
	MOVEM	U3,INPK+3(U4)
	SUBI	U4,3
	JRST	INS4D

INS4E:	SKIPN	INPA(X1)
	JRST	INS5
	MOVEI	U4,INPSIZ-2
	SKIPE	INPA(U4)
	JRST	INSZ
	SUBI	U4,2
	SKIPN	INPA(U4)
	JRST	.-2

INS4F:	CAMGE	U4,X1
	JRST	INS5
	MOVE	U3,INPA(U4)
	MOVEM	U3,INPA+2(U4)
	MOVE	U3,INPP(U4)
	MOVEM	U3,INPP+2(U4)
	SUBI	U4,2
	JRST	INS4F

INS5:	MOVE	U2,BOOKA(X3)
	MOVEM	U2,INPA(X1)
	MOVE	U2,BOOKP(X3)
	MOVEM	U2,INPP(X1)
	JUMPE	Z,.+3
	MOVE	U2,BOOKK(X3)
	MOVEM	U2,INPK(X1)
INSX:	AOS	FILCHG		;FILE CHANGE COUNT
	SOJGE	X4,INS2
INS6:	SKIPE	FILCHG		;HAS FILE BEEN CHANGED
	PUSHJ	PDP,DMPFIL	;YES SO DUMP
	SETZM	FILEIN		;FORCE NEW FILE IN
	MOVEI	U1,[ASCIZ /BSAVED./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	INSZZ
;INSZ INSZZ WHERIN WHRINS GETFIL GETFIA GETFIR

INSZ:	MOVEI	U1,[ASCIZ /UNABLE TO ADD TO FILE /]
	PUSHJ	PDP,PRINT
	MOVE	U1,FILEIN
	PUSHJ	PDP,OCTOUT
	PUSHJ	PDP,TERPRI
	JRST	INSX+1		;NO CHANGE TO REPORT

INSZZ:	POPJ	PDP,		;3 APR 80 FORM BYPASS
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	MOVE	U2,[SIXBIT /CHK/]
	MOVEM	U2,WHERIN+1
	MOVE	U2,[055000000000]
	MOVEM	U2,WHERIN+2
	MOVE	U2,[SIXBIT /  3ALS/]
	MOVEM	U2,WHERIN+3
	ENTER	12,WHERIN
	HALT
	OUTPUT	12,WHRINS
	RELEAS	12,
	POPJ	PDP,

WHERIN:	SIXBIT /DIRECT/
	SIXBIT	/CHK/
	055000000000
	SIXBIT /  3ALS/

WHERES=1133		;MUST BE SAME AS IN CKB

WHRINS:	IOWD	WHERES,WHERE
	Z

GETFIL:	POPJ	PDP,		;3 APR 80 FORM BYPASS
	MOVEI	U2,INPSIZ-1
	SETZM	INPA(U2)
	SOJGE	U2,.-1
	MOVE	U2,BKMIN2
	MOVEM	U2,BKMIN
	MOVE	U1,FILEI2	;U1 MAY HAVE BEEN CHANGED
	MOVEM	U1,FILEIN	;NOW ACKNOWLEDGE NEW FILE
	LDB	U2,[POINT 5,U1,29]
	LDB	U3,[POINT 5,U1,35]
	MOVE	U2,CRIP(U2)
	LSH	U2,14		;MAKE ROOM FOR  REST
	IOR	U2,CRIP(U3)
	TRNN	U1,10000	;TEST K BIT
	IOR	U2,[SIXBIT /MA/]
	TRNE	U1,10000	;TEST AGAIN
	IOR	U2,[SIXBIT /KA/]	;KING BOARDS
	MOVEM	U2,DSKBKD	;SAVE FOR DMPFIL
	SETZM	FILCHG		;START OVER
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
GETFIA:	MOVEM	U2,DSKBKM
	MOVE	U2,[SIXBIT /CHK/]
	MOVEM	U2,DSKBKM+1
	MOVE	U2,[055000000000]
	MOVEM	U2,DSKBKM+2
	MOVE	U2,[SIXBIT /  3ALS/]
	MOVEM	U2,DSKBKM+3
	LOOKUP	12,DSKBKM
	JRST	GETFIR
	INPUT	12,BKMIN
	HRRZ	U2,BKMIN
	ADDI	U2,INPSIZ/BLOWUP
	HRRM	U2,BKMIN
	SKIPE	(U2)		;IS FILE PARTIALLY EMPTY
	CAIL	U2,INPA+INPSIZ-1	;IS LAST FILE IN
	JRST	GETFIR		;YES
	MOVE	U2,DSKBKM
	ADD	U2,[000100000000]
	JRST	GETFIA
GETFIR:	RELEAS	12,
	POPJ	PDP,
;ZEROIT DMPFIL DMPFI1 DMPFI2 DMPFI3 DSKBKD DSKBKM BKMIN BKMIN2 INPA BOOKA BOOKP BOOKK BOOKM BOOKI FILEIN FILEI2 INBITS

ZEROIT:	HRRZ	U1,BKMIN2
	SETZM	1(U1)		;ZERO REST OF TABLE
	CAMGE	U1,INPA+INPSIZ-2
	AOJA	U1,.-2
	POPJ	PDP,

DMPFIL:	POPJ	PDP,		;3 APR 80 BYPASS
	INIT	12,17
	SIXBIT	/DSK/
	Z
	HALT
	MOVE	U1,FILEIN	;RESTORE VALUE
	MOVE	U2,BKMIN2
	MOVEM	U2,BKMIN	;START AT FRONT
	MOVE	U2,DSKBKD	;STARTING FILE
	SETZ	X5,		;TO INDEX WHERE
	MOVEI	U5,BLOWUP		;TO COUNT
DMPFI1:	SKIPN	U3,WHERE(X5)
	JRST	DMPFI2-1		;PUT DATA HERE
	CAMN	U1,U3
	JRST	DMPFI2	;FOUND
	ADDI	X5,BLOWUP+1
	CAIGE	X5,WHERES
	JRST	DMPFI1		;TRY AGAIN
	MOVEI	U1,[ASCIZ /WHERE TABLE IS FULL/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	DMPFI3		;TROUBLE TROUBLE

	MOVEM	U1,WHERE(X5)
DMPFI2:	MOVEM	U2,DSKBKM
	MOVE	U2,[SIXBIT /CHK/]
	MOVEM	U2,DSKBKM+1
	MOVE	U2,[055000000000]
	MOVEM	U2,DSKBKM+2
	MOVE	U2,[SIXBIT /  3ALS/]
	MOVEM	U2,DSKBKM+3
	ENTER	12,DSKBKM
	HALT
	OUTPUT	12,BKMIN
	HRRZ	U2,BKMIN
	ADDI	U2,INPSIZ/BLOWUP
	HRRM	U2,BKMIN
	MOVE	Z,-1(U2)
	SKIPE	BOOKK(X3)
	MOVE	Z,-2(U2)
	AND	Z,[377377377377]	;REMOVE MOVE BITS
	MOVEM	Z,WHERE+1(X5)
	ADDI	X5,1
	JUMPE	Z,DMPFI3
	MOVE	U2,DSKBKM
	ADD	U2,[000100000000]
	SOJG	U5,DMPFI2
DMPFI3:	RELEAS	12,
	SETZM	FILCHG
	POPJ	PDP,

DSKBKD:	Z		;TEMPORARY SAVE OF DSKBKM FOR DMPFIL
DSKBKM:	Z
	SIXBIT	/CHK/
	055000000000
	SIXBIT	/  3ALS/
	Z

BKMIN:	IOWD	INPSIZ/BLOWUP,INPA
	Z
BKMIN2:	IOWD	INPSIZ/BLOWUP,INPA
	Z
	Z

INPA:	BLOCK	INPSIZ
INPP=INPA+1
INPK=INPA+2
	Z
BOOKA:	BLOCK	BOKSIZ+20
BOOKP:	BLOCK	BOKSIZ+20
BOOKK:	BLOCK	BOKSIZ+20
BOOKM:	BLOCK	BOKSIZ+20
BOOKI:	BLOCK	BOKSIZ*2+40
FILEIN:	Z		;FILE ACTUALLY IN MEMORY
FILEI2:	Z		;TEMPORARY STORE OF FILEIN

INBITS:	LSHC	X2,-3
	LSH	X2,10
	LSHC	X2,1
	LSH	X2,10
	LSHC	X2,1
	LSH	X2,10
	LSHC	X2,1
	LSH	X2,10
	POPJ	PDP,
;BOLAND BOL1 BOL2 BOL3 BOL4 X4VAR BDIN BDIN0 BDIN1 BDIN2 BDIN3 BDIN4

BOLAND:	PUSHJ	PDP,MAGIN
	HALT
	MOVE	X1,U1
	SKIPE	TRUNKF		;DO WE PRINT
	PUSHJ	PDP,TYO
	CAIN	U1,11		;LOOK FOR A TAB
	JRST	.+3		;ONE FOUND
	CAIE	U1,15		;LOOK FOR C.R.
	JRST	.-10		;NOT TIME TO STOP
	SKIPE	TRUNKF		;NOW END COMMENT
	PUSHJ	PDP,TERPRI
BOL1:	PUSHJ	PDP,MAGIN
	HALT
	CAIN	U1,11		;IGNORE SECOND TAB
	JRST	.-3
	MOVEM	U1,BORW#	;BLACK OR WHITE TO PLAY
	SETZ	U2,
	CAIN	U1,"D"
	JRST	BOL3
BOL2:	PUSHJ	PDP,MAGIN
	HALT
	CAIGE	U1,72
	CAIGE	U1,60
	JRST	BOL3
	IMULI	U2,12
	ADD	U2,U1
	SUBI	U2,60
	SETZ	U1,
	JRST	BOL2

BOL3:	MOVEM	U2,WINLOS
	PUSHJ	PDP,NEWLIN
	HALT
	JUMPE	U2,BOL4
	CAME	U1,BORW
	JRST	.+4
	TRNN	U2,1
	AOS	WINLOS
	JRST	.+3
	TRNE	U2,1
	AOS	WINLOS
BOL4:	MOVEI	Z,1
	CAIN	U1,"W"
	MOVEM	Z,COLOR
	CAIN	U1,"B"
	SETZM	COLOR
	PUSHJ	PDP,BDIN	;SET UP BOARD
	MOVE	A,U3
	PUSHJ	PDP,NEWLIN
	HALT
	PUSHJ	PDP,BDIN0
	MOVE	P,U3
	MOVE	K,U5
	MOVEM	A,TA
	MOVEM	P,TP
	MOVEM	K,TK
	MOVEI	U1,"TK"
	MOVEM	U1,LPOINT
	SETZ	X2,
	SETOM	X4VAR
	JRST	BEGIN2

X4VAR:	-1		;COUNT OF VARIATION BOARDS

BDIN:	SETZ	U5,
BDIN0:	SETZ	U3,
BDIN1:	HRLZI	U4,400000
	SETZ	U2,
BDIN2:	PUSHJ	PDP,MAGIN
	HALT
	CAIGE	U1,72
	CAIGE	U1,60
	JRST	BDIN3
	IMULI	U2,12
	ADD	U2,U1
	SUBI	U2,60
	SETZ	U1,
	JRST	BDIN2

BDIN3:	EXCH	U1,U2
	JUMPE	U1,BDIN4
	PUSHJ	PDP,OUTIN
	MOVNS	U1
	ROT	U4,(U1)
	TDO	U3,U4
	CAIE	U2,"K"
	JRST	.+3
	TDO	U5,U4
	JRST	BDIN1
BDIN4:	CAIN	U2,","
	JRST	BDIN1
	POPJ	PDP,

;FIXX NOFIND FIXK FIXK2

FIXX:	TTYUUO	11,0
	SETZM	LASCAR
	SETZM	FLAG#
	SETZM	FIXINS#
	MOVEI	U1,1
	SETZM	COLOR
	CAME	U1,SI
	AOS	COLOR
	SETZB	X3,X4
	MOVEM	A,PLA
	MOVEM	P,PLP
	MOVEM	K,PLK
	SETZM	OJ
	PUSHJ	PDP,LEGAL
	JRST	FIX1		;NO LEGAL MOVES
	AOS	OJ		;SET JUMP FLAG
	PUSHJ	PDP,X4NORM
	MOVEI	U1,[ASCIZ /LEGAL MOVES ARE:/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,LEGM	;REPORT LEGAL MOVES
	SETOM	BINDEX
	MOVEI	Z,1
	XORM	Z,COLOR		;COLOR IS REVERSED IN SAVMOV
	PUSHJ	PDP,SAVMOV
	MOVEI	Z,1
	XORM	Z,COLOR
	HLRZ	U1,BOOKI
	MOVEM	U1,FILEI2
	CAME	U1,FILEIN
	PUSHJ	PDP,GETFIL
	MOVE	U2,BOOKA
	MOVE	U3,BOOKP
	MOVE	U4,BOOKK
	PUSHJ	PDP,FINDX1
	JRST	NOFIND
	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /LISTED MOVES ARE /]
	PUSHJ	PDP,PRINT
	MOVE	X1,X1S
	MOVE	X5,INPA(X1)
	PUSHJ	PDP,EXBITS
	PUSHJ	PDP,RPMOVE
	MOVE	X5,INPP(X1)
	PUSHJ	PDP,EXBITS
	SKIPE	BOOKK		;A KING BOARD
	JRST	FIXK		;YES
	JUMPE	X5,FIX6
	MOVEI	U1,[ASCIZ /,/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,RPMOVE
	JRST	FIX6

NOFIND:	MOVEM	X1,X1S
	MOVEI	U1,[ASCIZ /BOARD NOT FOUND, CR OR TYPE MOVE :/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	TTYUUO	11,0
	SETZM	LASCAR
	PUSHJ	PDP,SCAN
	CAIN	U1,12		;A LINE FEED
	JRST	.-2		;YES
	CAIN	U1,15		;A CR
	JRST	FIXOK
	SETOM	FIXINS		;SO NEW BOARD WILL BE INSERTED
	SETZM	BOOKM
	SETZM	BOOKM+1
	JRST	FIX8		;NOW GET MOVE

FIXK:	MOVE	Z,X5
	MOVE	X5,INPK(X1)
	PUSHJ	PDP,EXBITS
	LSH	Z,4
	IORB	X5,Z
	JUMPE	X5,FIXK2
	MOVEI	U1,[ASCIZ /, WIN-LOSS DISTANCE IS /]
	PUSHJ	PDP,PRINT
	MOVE	U1,X5
	PUSHJ	PDP,NUMOUT
	PUSHJ	PDP,TERPRI
	JRST	FIX6

FIXK2:	MOVEI	U1,[ASCIZ /, REPORTED AS A DRAW./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	FIX6
;RPMOVE FIX1 FIX6 FIX7 FIX8 FIX11 FIX10 FIX13

RPMOVE:	MOVEM	X5,X4
	JUMPN	X5,.+4
	MOVEI	U1,[ASCIZ /0-0/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,
	SKIPN	COLOR
	JRST	.+7
	MOVEI	U1,1
	CAMN	X4,X4TAB(U1)
	JRST	.+3
	CAIGE	U1,17
	AOJA	U1,.-3
	MOVE	X4,U1
	SUBI	X4,1		;COUNT FROM ZERO
	MOVE	U3,MOVES(X4)
	JUMPN	U3,.+4
	MOVEI	U1,[ASCIZ /ILLEGAL/]
	PUSHJ	PDP,PRINT
	POPJ	PDP,
	HLRZ	U1,U3
	PUSHJ	PDP,NUMOUT
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	HRRZ	U1,U3
	PUSHJ	PDP,NUMOUT
	POPJ	PDP,

FIX1:	MOVEI	U1,[ASCIZ /NO LEGAL MOVES FOUND./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

FIX6:	TTYUUO	11,0
	SETZM	LASCAR
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /CR IF OK, OR ENTER MOVES WANTED/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
FIX7:	PUSHJ	PDP,SCAN
	CAIN	U1,12		;A LINE FEED
	JRST	FIX7		;YES
	CAIN	U1,15		;A CR
	JRST	FIXOK
	SETZM	BOOKM
	SETZM	BOOKM+1
FIX8:	HRLZ	U2,U1		;START IN LEFT HALF
	PUSHJ	PDP,SCAN
	TLNE	U1,-1
	JRST	.+3
	PUSHJ	PDP,EOL
	JRST 	ERR
	HRR	U2,U1		;TERMINATION IN RIGHT HALF
	JUMPE	U2,NULL		;TO STORE NO-MOVE BOARD FOR TEST
	MOVEI	X4,20
	CAMN	U2,MOVES(X4)
	JRST	.+6
	SOJGE	X4,.-2
	MOVEI	U1,[ASCIZ /ILLEGAL MOVE. /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	FIX6
	ADDI	X4,1		;TO COUNT FROM 1
	SKIPE	COLOR
	MOVE	X4,X4TAB(X4)
	MOVEM	X4,BOOKM
	SKIPE	BOOKK
	JRST	FIX9K
	PUSHJ	PDP,SCAN
	CAIN	U1,15
	JRST	FIX11
	TLNE	U1,-1
	JRST	.+3
	PUSHJ	PDP,EOL
	JRST	ERR
	HRRZS	U1
	HRLZ	U2,U1
	PUSHJ	PDP,SCAN
	TLNE	U1,-1
	JRST	.+3
	PUSHJ	PDP,EOL
	JRST 	ERR
	HRR	U2,U1
	MOVEI	X4,20
	CAMN	U2,MOVES(X4)
	JRST	.+6
	SOJGE	X4,.-2
	MOVEI	U1,[ASCIZ /ILLEGAL SECOND MOVE, FIRST MOVE ONLY WILL BE USED. /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	FIX11
	ADDI	X4,1		;TO COUNT FROM 1
	SKIPE	COLOR
	MOVE	X4,X4TAB(X4)
	MOVEM	X4,BOOKM+1

FIX11:	MOVE	X1,X1S
	SKIPE	FIXINS		;IS BOARD IN TABLE
	JRST	INS4B		;NO SO INSERT
	MOVE	X1,X1S		;WE NEED THIS
FIX10:	HRRZ	X2,BOOKM
	PUSHJ	PDP,INBITS
	MOVE	U1,INPA(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPA(X1)
	SKIPE	BOOKK
	JRST	FIX12
FIX13:	MOVE	X2,BOOKM+1
	PUSHJ	PDP,INBITS
	MOVE	U1,INPP(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPP(X1)
	JRST	FIXZ
;FIX12 FIXOK FIXZ ACCEPT ACC ACC1 ACC2 ACC3

FIX12:	HLRZ	X2,BOOKM
	LSH	X2,-4
	PUSHJ	PDP,INBITS
	MOVE	U1,INPP(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPP(X1)
	HLRZ	X2,BOOKM
	ANDI	X2,17
	PUSHJ	PDP,INBITS
	MOVE	U1,INPK(X1)
	AND	U1,[377377377377]
	IOR	U1,X2
	MOVEM	U1,INPK(X1)
	JRST	FIXZ

FIXOK:	MOVEI	U1,[ASCIZ /NO CHANGE MADE./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	JRST	.+2
FIXZ:	PUSHJ	PDP,DMPFIL
	PUSHJ	PDP,TERPRI
	SETOM	BINDEX		;TO OVERWRITE TRASH
	POPJ	PDP,
ACCEPT:	PUSHJ	PDP,TERPRI
	SETZM	U5
	TTYUUO	11,0
	SETZM	LASCAR
	MOVEI	U1,[ASCIZ /BLACK PIECES ON: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,ACC		;READ IN BLACK PIECES
	MOVEM	U3,OA		;STORE BLACK PIECES
	MOVEI	U1,[ASCIZ /WHITE PIECES ON: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,ACC		;NOW READ IN WHITE PIECES
	MOVEI	U1,[ASCIZ /BLACK TO PLAY? /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,1
	MOVEM	U1,SI
	PUSHJ	PDP,NOYES
	AOSA	SI
	JRST	.+3		;BLACK IS TO PLAY
	EXCH	U3,OA
	SETZM	SIDE
	MOVEM	U3,OP		;STORE WHITE PIECES
	MOVEM	U5,OK
	MOVE	A,OA
	MOVEM	A,PLA
	MOVE	P,OP
	MOVEM	P,PLP
	MOVE	K,OK
	MOVEM	K,PLK
	PUSHJ	PDP,TERPRI
	JRST	FIXX

ACC:	SETZM	U3
ACC1:	HRLZI	U4,400000
ACC2:	PUSHJ	PDP,SCAN
	CAIN	U1,15		;CR?
	POPJ	PDP,		;YES
	TLZE	U1,400000	;NUMBER?
	JRST	ACC3		;YES
	HRRZS	U1		;GET RID OF LEFT HALF FLAG BITS
	CAIN	U1,K		;IF A KING ...
	TDO	U5,U4		; ... SET KING BIT
	JRST	ACC1
ACC3:	PUSHJ	PDP,OUTIN	;CONVERT TO INTERNAL NUMBERS
	MOVNS	U1
	ROT	U4,(U1)		;ROTATE TO BIT'S POSITION
	TDO	U3,U4		;SET PIECE'S BIT
	JRST	ACC2
;SM SM1 SM3 SM4 SM5 SM5A SM6 SM6A SM20 SM21 SM22 SM23 SM24 SM25 SM25A SM26 SM26A SM30 SM31 SM32 SM33 SM35 SM35A SM36 SM36A
;Routine to smooth data in EVAL table both diagonally and adjacently
;and leave  ((L-R)/(L+R) LSH 14) + CORADD in EVAL space

SM:	MOVEM K,KSAVE#
SM1:	SUBI K,SIGL11
	SETZM EVAL11(K)
	HRLZI U1,EVAL11(K)
	HRRI U1,EVAL11+1(K)
	BLT U1,EVAL11+↑D44(K)
	MOVEI U1,2		;First level start
SM3:	MOVEI U2,2
SM4:	MOVEI U3,4
SM5:	MOVE X1,U1
	IMULI X1,3
	ADD X1,U2
	IMULI X1,5
	ADD X1,U3
	MOVN X2,X1
	ADDI X2,↑D44
	ADD X1,K
	ADD X2,K
	MOVS Z,LRN11(X2)		;To balance tables around zero
	ADD Z,LRN11(X1)
	LSH Z,-1
	TRZ Z,400000
	ADDM Z,EVAL11(X1)
;JRST SM5A here to surpress adjacent smoothing
	LSH Z,-3
	TRZ Z,700000
	CAIGE U1,2
	ADDM Z,EVAL11+↑D15(X1)		;Upward adjacent smoothing, first term
	SKIPLE U1
	ADDM Z,EVAL11-↑D15(X1)		;Downward adjacent smoothing, first term
	CAIGE U2,2		;Repeat for second term
	ADDM Z,EVAL11+5(X1)
	SKIPLE U2
	ADDM Z,EVAL11-5(X1)
	CAIGE U3,4		;Repeat for third term
	ADDM Z,EVAL11+1(X1)
	SKIPLE U3
	ADDM Z,EVAL11-1(X1)
SM5A:	SOJGE U3,SM5
	SOJGE U2,SM4
	SOJGE U1,SM3
	SETZM CPOS
	SETZM CNEG
	MOVEI U1,↑D44		;Now get (L-R)/(L+R) ASH 14
	MOVE X1,U1
	ADD X1,K
SM6:	HLRZ U2,EVAL11(X1)
	HRRZ U3,EVAL11(X1)
	SUB U2,U3
	JUMPE U2,SM6A
	LSH U3,1
	ADD U3,U2
	ASH U2,15		;Multiply by 8192
	IDIV U2,U3		;and get ratio
	SKIPLE U2
	AOS CPOS
	SKIPGE U2
	AOS CNEG
	SKIPE U2
	ADD U2,CORADD		;Make it always positive for processing
SM6A:	MOVEM U2,EVAL11(X1)
	SOS X1
	SOJGE U1,SM6
	MOVE K,KSAVE
	JRST L13

;Second level smoothing
SM20:	MOVEM K,KSAVE
SM21:	SUBI K,SIGL21
	SETZM EVAL21(K)
	HRLZI U1,EVAL21(K)
	HRRI U1,EVAL21+1(K)
	BLT U1,EVAL21+↑D342(K)
SM22:	MOVEI U1,6
SM23:	MOVEI U2,6
SM24:	MOVEI U3,6
SM25:	MOVE X1,U1
	IMULI X1,7
	ADD X1,U2
	IMULI X1,7
	ADD X1,U3
	MOVN X2,X1
	ADDI X2,↑D342
 	ADD X1,K
	ADD X2,K
	MOVS Z,LRN21(X2)
	ADD Z,LRN21(X1)
	LSH Z,-1
	TRZ Z,400000
	ADDM Z,EVAL21(X1)
;JRST SM25A here to surpress adjacent smoothing
	LSH Z,-3
	TRZ Z,700000
	CAIGE U1,6
	ADDM Z,EVAL21+↑D49(X1)
	SKIPLE U1
	ADDM Z,EVAL21-↑D49(X1)
	CAIGE U2,6
	ADDM Z,EVAL21+7(X1)
	SKIPLE U2
	ADDM Z,EVAL21-7(X1)
	CAIGE U3,6
	ADDM Z,EVAL21+1(X1)
	SKIPLE U3
	ADDM Z,EVAL21-1(X1)
SM25A:	SOJGE U3,SM25
	SOJGE U2,SM24
	SOJGE U1,SM23
	SETZM CPOS
	SETZM CNEG
	MOVEI U1,↑D342		;Now get (L-R)/(L+R) ASH 14
	MOVE X1,U1
	ADD X1,K
SM26:	HLRZ U2,EVAL21(X1)
	HRRZ U3,EVAL21(X1)
	SUB U2,U3
	JUMPE U2,SM26A
	LSH U3,1
	ADD U3,U2
	ASH U2,15		;Multiply by 8192
	IDIV U2,U3		;and get ratio
	SKIPLE U2
	AOS CPOS
	SKIPGE U2
	AOS CNEG
	SKIPE U2
	ADD U2,CORADD		;Make it always positive for processing
SM26A:	MOVEM U2,EVAL21(X1)
	SOS X1
	SOJGE U1,SM26
	MOVE K,KSAVE
	JRST L23

SM30:	MOVEM K,KSAVE#
SM31:	SUBI K,SIGLF
	SETZM EVALF(K)
	HRLZI U1,EVALF(K)
	HRRI U1,EVALF+1(K)
	BLT U1,EVALF+↑D224(K)
SM32:	MOVEI U1,↑D14
SM33:	MOVEI U2,↑D14
SM35:	MOVE X1,U1
	IMULI X1,↑D15
	ADD X1,U2
	MOVN X2,X1
	ADDI X2,↑D224
	ADD X1,K
	ADD X2,K
	MOVS Z,LRNF(X2)
	ADD Z,LRNF(X1)
	LSH Z,-1
	TRZ Z,400000
	ADDM Z,EVALF(X1)
	JFCL			;Room for JRST SM35A to surpress adjacent smoothing
	LSH Z,-2
	TRZ Z,600000
	CAIGE U1,↑D14
	ADDM Z,EVALF+↑D15(X1)
	SKIPLE U1
	ADDM Z,EVALF-↑D15(X1)
	CAIGE U2,↑D14
	ADDM Z,EVALF+1(X1)
	SKIPLE U2
	ADDM Z,EVALF-1(X1)
SM35A:	SOJGE U2,SM35
	SOJGE U1,SM33
	SETZM CPOS
	SETZM CNEG
	MOVEI U1,↑D224		;Now get (L-R)/(L+R) ASH 14
	MOVE X1,U1
	ADD X1,K
SM36:	HLRZ U2,EVALF(X1)
	HRRZ U3,EVALF(X1)
	SUB U2,U3
	JUMPE U2,SM36A
	LSH U3,1
	ADD U3,U2
	ASH U2,15		;Multiply by 8192
	IDIV U2,U3		;and get ratio
	SKIPLE U2
	AOS CPOS
	SKIPGE U2
	AOS CNEG
	SKIPE U2
	ADD U2,CORADD		;Make it always positive for processing
SM36A:	MOVEM U2,EVALF(X1)
	SOS X1
	SOJGE U1,SM36
	MOVE K,KSAVE
	JRST L33
;SGT5 SGT5A SGT5B SGT5C SGT3 SGT3A SGTOT NUM4 NUM1 XPAR TABFIX TABFI2 TABFI3 TABFIZ TBCHAN TBFILE PAR TABLST TAB1 TABLS2 TAB2 TAB3 TAB3A TAB3B TAB3C TAB4 TAB4A TAB4B TAB5 TAB5A TAB8 TAB7 TAB6 TAB20 TAB20A TAB20B TAB21 TAB22 TAB23 TAB24 TAB24A TAB25 TAB26 TAB27 TAB31 TAB32 TAB32A TAB33 TAB34

;Register assignments
;	X1	Gets used in NUM1
;	U1	Address of ASCIZ to print
;	X2	Gets used in some subroutine
;	U2	-2 -1 0 1 2 Numbers for headings, Index for 1st 3-range term
;	X3	Index between tables
;	U3	Index to 5 for 5-range terms
;	X4	TLIST index for names
;	U4	Repeat count
;	X5	Index into EVAL table
;	U5	Phase
;	Q	Index for 2nd 3-range term

SGT5:	BLOCK	7	;5-range term totals
SGT5A:	BLOCK	7 	;5-range term totals (for second level)
SGT5B:	BLOCK	7	;5-range term totals (for second level)
SGT5C:	BLOCK	↑D15	;15-range term totals (for third level)
SGT3:	BLOCK	3	;1st 3-range term totals
SGT3A:	BLOCK	3	;2nd 3-range term totals
SGTOT:	0		;Total for 1st level table

NUM4:	CAIGE U1,144
	CAMG U1,[-144]
	JRST .+3
	MOVEI X1," "
	PUSHJ PDP,TYO
	CAIGE U1,12
	CAMG U1,[-12]
	JRST .+3
	MOVEI X1," " 
	PUSHJ PDP,TYO
NUM1:	JUMPL	U1,NUM2
	MOVEI	X1," "
	PUSHJ	PDP,TYO
	JRST	NUM3



;Routine to list Signature Tables in a file called SIGTAB.001 etc.
XPAR:	SETOM TABFLG#
	SKIPA
TABFIX:	SETZM TABFLG
	POPJ	PDP,		;CKLY EXIT
	MOVE U1,[SIXBIT /001   /]
	MOVEM U1,TBFILE+1
TABFI2:	OPEN 2,TBCHAN
	JRST TABFIZ
	MOVE U1,[SIXBIT /  3ALS/]
	MOVEM U1,TBFILE+3
	LOOKUP 2,TBFILE
	JRST TABFI3
	CLOSE 2,
	HLLZ U1,TBFILE+1
	ADD U1,[1,,0]
	MOVEM U1,TBFILE+1
	JRST TABFI2

TABFI3:	ENTER 2,TBFILE
	JRST TABFIZ
	OUTBUF 2,4
	MOVEI U1,1
	EXCH U1,LPFLAG
	MOVEM U1,LPFLAS#
	PUSHJ PDP,TAB1
	RELEAS 2,
	MOVE U1,LPFLAS
	MOVEM U1,LPFLAG
	POPJ PDP,

TABFIZ:	OUTSTR [ASCIZ/SIGTAB initiation error/]
	POPJ PDP,

TBCHAN:	1		;Mode
	SIXBIT/DSK   /
	LPTBUF,,0
	
TBFILE:	SIXBIT/TAB/
	SIXBIT/001   /
	0
	SIXBIT/  3ALS/


;Routine to list Signature Tables (on line when here or to file if from TABFIX)
;If TABFLG is SETOM  then only summary info is listed
PAR:	SETOM TABFLG
	SKIPA
TABLST:	SETZM TABFLG
TAB1:	MOVEI U5,3		;Start with phase 3
	MOVEI U1,[ASCIZ /	Signature Tables after /]
	PUSHJ PDP,PRINT
	MOVE U1,LABEL
	PUSHJ PDP,NUMOUT
	MOVEI U1,[ASCIZ / boards. /]
	PUSHJ PDP,PRINT
TABLS2:	MOVE U4,U5
	IMULI U4,SIGSIZ
	MOVE U2,LABEL+2(U4)
	ADD U2,LABEL+3(U4)
	ADD U2,LABEL+4(U4)
	MOVE U1,LABEL+3(U4)
	ASH U1,-1
	ADD U1,LABEL+2(U4)
	IMULI U1,1750
	IDIV U1,U2
	IDIVI U1,12
	MOVE U2,X2
	PUSHJ PDP,RJOUT1
	MOVEI U1,[ASCIZ /./]
	PUSHJ PDP,PRINT
	MOVE U1,U2
	PUSHJ PDP,NUMOUT
	SOJGE U5,TABLS2
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
	MOVEI U5,3
TAB2:	SKIPE TABFLG
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /				Phase /]
	PUSHJ PDP,PRINT
	MOVE U1,U5
	PUSHJ PDP,NUMOUT
	SKIPE TABFLG
	PUSHJ PDP,TERPRI
	SKIPE TABFLG
	PUSHJ PDP,TERPRI
	MOVE X5,U5
	IMULI X5,SIGSIZ
	MOVEI X3,6		;Number of first level tables
	MOVE X4,U5
	IMULI X4,↑D18		;18 names per phase
TAB3:
	SKIPE TABFLG
	JRST TAB3C		;Bypass when PAR or XPAR
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /↓/]
	PUSHJ PDP,PRINT
	XCT TLIST(X4)		;The 1st 3-range term name
	PUSHJ PDP,PRINT
	PUSHJ PDP,TERPRI
	XCT TLIST+1(X4)		;The second range-3 term name
	PUSHJ PDP,PRINT
	MOVEI U1,[ASCIZ /    -1		     0		    +1
/]
	PUSHJ PDP,PRINT
	XCT TLIST+2(X4)		;The range-5 term name 
	PUSHJ PDP,PRINT
	MOVEI U4,3
TAB3A:	MOVNI U2,2		;Now print -2  -1  0  1  2  three times
TAB3B:	MOVE U1,U2		;Start line with a -1, 0 or 1
	PUSHJ PDP,NUM1
	CAIGE U2,2
	AOJA U2,TAB3B
	MOVEI U1,[ASCIZ /	/]
	PUSHJ PDP,PRINT
	SOJG U4,TAB3A
	PUSHJ PDP,TERPRI
TAB3C:	MOVEI U2,3
	SETZM SGT3(U2)
	SETZM SGT3A(U2)
	SOJG U2,.-2
	MOVEI U3,5
	SETZM SGT5(U3)
	SOJG U3,.-1
	SETZM SGTOT
	MOVEI Q,2
	MOVNI U4,1		;The 3 lines of data start with -1, 0, and 1
TAB4:	SKIPE TABFLG
	JRST TAB4A
	PUSHJ PDP,TERPRI
	MOVE U1,U4
	PUSHJ PDP,NUM1
	AOS U4
	MOVEI U1,[ASCIZ /	/]
	PUSHJ PDP,PRINT
TAB4A:	MOVEI U2,2
TAB4B:	MOVEI U3,4
TAB5:	MOVE U1,EVAL11(X5)
	ADDM U1,SGT5(U3)
	ADDM U1,SGT3(U2)
	ADDM U1,SGT3A(Q)
	ADDM U1,SGTOT
	SKIPN TABFLG
	PUSHJ PDP,NUM1
	AOS X5
	SOJGE U3,TAB5
	MOVEI U1,[ASCIZ /	/]
	SKIPN TABFLG
	PUSHJ PDP,PRINT
	SOJGE U2,TAB4B
	SOJGE Q,TAB4
	SKIPE TABFLG
	JRST TAB5A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /
Total /]
	PUSHJ PDP,PRINT
	MOVE U1,SGTOT
	PUSHJ PDP,NUMOUT
	MOVEI U1,[ASCIZ /  /]
	PUSHJ PDP,PRINT
TAB5A:	SETZM SGTOT
	XCT TLIST(X4)		;The first range-3 term name
	PUSHJ PDP,PRINT
	MOVEI Q,2
TAB8:	MOVE U1,SGT3A(Q)
	PUSHJ PDP,NUM4
	SETZM SGT3A(Q)
	SOJGE Q,TAB8

	MOVEI U1,[ASCIZ /  	/]
	PUSHJ PDP,PRINT
	XCT TLIST+1(X4)		;The 2nd 3-range term name
	PUSHJ PDP,PRINT
	MOVEI U2,2
TAB7:	MOVE U1,SGT3(U2)
	PUSHJ PDP,NUM4
	SETZM SGT3(U2)
	SOJGE U2,TAB7
	MOVEI U1,[ASCIZ /  	/]
	PUSHJ PDP,PRINT

	XCT TLIST+2(X4)		;The 5-range term name
	PUSHJ PDP,PRINT
	MOVEI U3,4
TAB6:	MOVE U1,SGT5(U3)
	PUSHJ PDP,NUM4
	SETZM SGT5(U3)
	SOJGE U3,TAB6

	PUSHJ PDP,TERPRI
	ADDI X4,3		;3 names farther along
	SOJG X3,TAB3		;Now for the next first level table
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
TAB20:	MOVEI U1,[ASCIZ /				Second level
/]
	PUSHJ PDP,PRINT
	PUSHJ PDP,TERPRI
	MOVE X5,U5
	IMULI X5,SIGSIZ
	MOVEI X3,2	;Number of second level tables
	MOVE X4,U5
	IMULI X4,↑D18		;18 names per phase
TAB20A:	MOVEI U2,3
	SKIPE TABFLG
	JRST TAB21
	MOVEI U1,[ASCIZ /↓/]
	PUSHJ PDP,PRINT
	XCT TLIST(X4)
	PUSHJ PDP,PRINT
	AOS X4
	SOJG U2,.-3
	PUSHJ PDP,TERPRI
	MOVEI U2,3
	XCT TLIST(X4)
	PUSHJ PDP,PRINT
	AOS X4
	SOJG U2,.-3
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /      /]
	PUSHJ PDP,PRINT
	MOVNI U2,3
TAB20B:	MOVE U1,U2
	PUSHJ PDP,NUM1
	MOVEI U1,[ASCIZ /	      /]
	PUSHJ PDP,PRINT
	AOS U2	
	CAIG U2,3
	JRST TAB20B
	PUSHJ PDP,TERPRI
	MOVEI U2,3
	XCT TLIST(X4)
	PUSHJ PDP,PRINT
	AOS X4
	SOJG U2,.-3
	PUSHJ PDP,TERPRI
	MOVEI U2,7
	MOVEI U1,[ASCIZ /-3-2-1 0 1 2 3	/]
	PUSHJ PDP,PRINT
	SOJG U2,.-2
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
TAB21:	MOVEI U2,6
	SETZM SGT5(U2)
	SETZM SGT5A(U2)
	SETZM SGT5B(U2)
	SOJGE U2,.-3
	MOVEI U2,6
TAB22:	MOVEI U3,6
TAB23:	MOVEI Q,6
TAB24:	MOVE U1,EVAL21(X5)
	ADDM U1,SGT5(U2)
	ADDM U1,SGT5A(U3)
	ADDM U1,SGT5B(Q)
	ADDM U1,SGTOT
	SKIPN TABFLG
	PUSHJ PDP,NUM1
	AOS X5
	SOJGE Q,TAB24
	MOVEI U1,[ASCIZ /	/]
	SKIPN TABFLG
	PUSHJ PDP,PRINT
	SOJGE U3,TAB23
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	SOJGE U2,TAB22
	SKIPE TABFLG
	JRST TAB24A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /Total /]
	PUSHJ PDP,PRINT
	MOVE U1,SGTOT
	PUSHJ PDP,NUMOUT
	PUSHJ PDP,TERPRI
TAB24A:	SETZM SGTOT
	MOVEI U2,6
TAB25:	MOVE U1,SGT5(U2)
	PUSHJ PDP,NUM4
	SETZM SGT5(U2)
	SOJGE U2,TAB25
	MOVEI U1,[ASCIZ /\\/]
	PUSHJ PDP,PRINT
	MOVEI U2,6
TAB26:	MOVE U1,SGT5A(U2)
	PUSHJ PDP,NUM4
	SETZM SGT5A(U2)
	SOJGE U2,TAB26
	MOVEI U1,[ASCIZ /\\/]
	PUSHJ PDP,PRINT
	MOVEI U2,6
TAB27:	MOVE U1,SGT5B(U2)
	PUSHJ PDP,NUM4
	SETZM SGT5B(U2)
	SOJGE U2,TAB27
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
	SOJG X3,TAB20A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /				Third level/]
	PUSHJ PDP,PRINT
	PUSHJ PDP,TERPRI
	PUSHJ PDP,TERPRI
	MOVE X5,U5
	IMULI X5,SIGSIZ
	MOVEI U2,↑D14
TAB31:	MOVEI U3,↑D14
TAB32:	MOVE U1,EVALF(X5)
	ADDM U1,SGT5(U2)
	ADDM U1,SGT5C(U3)
	ADDM U1,SGTOT
	SKIPN TABFLG
	PUSHJ PDP,NUM4
	AOS X5
	MOVEI U1,[ASCIZ / /]
	SKIPN TABFLG
	PUSHJ PDP,PRINT
	SOJGE U3,TAB32
	SKIPN TABFLG
	PUSHJ PDP,TERPRI
	SOJGE U2,TAB31
	SKIPE TABFLG
	JRST TAB32A
	PUSHJ PDP,TERPRI
	MOVEI U1,[ASCIZ /Total /]
	PUSHJ PDP,PRINT
	MOVE U1,SGTOT
	PUSHJ PDP,NUMOUT
	MOVEI U1,[ASCIZ /
Term averages
/]
	PUSHJ PDP,PRINT
TAB32A:	SETZM SGTOT
	MOVEI U2,↑D14
TAB33:	MOVE U1,SGT5(U2)
	IDIVI U1,↑D15
	PUSHJ PDP,NUM4
	SETZM SGT5(U2)
	MOVEI U1,[ASCIZ / /]
	PUSHJ PDP,PRINT
	SOJGE U2,TAB33
	PUSHJ PDP,TERPRI
	MOVEI U2,↑D14
TAB34:	MOVE U1,SGT5C(U2)
	IDIVI U1,↑D15
	PUSHJ PDP,NUM4
	SETZM SGT5C(U2)
	MOVEI U1,[ASCIZ / /]
	PUSHJ PDP,PRINT
	SOJGE U2,TAB34
	PUSHJ PDP,TERPRI
	MOVEI X1,14		;A FF
	SKIPN TABFLG
	PUSHJ PDP,TYO
	SOJGE U5,TAB2		;Now for the next phase
	POPJ PDP,
;LEGM LEGM1 INOUT EXBITS FIXIN FIX9K NULL OA OP OK MOVES

LEGM:	SETZM	FLAG
	MOVEI	X4,17
	SETZM	MOVES(X4)	;CLEAR SPACE
	SOJGE	X4,.-1
	SETZ	X4,
	MOVEI	U3,4
	SKIPE	U2,PLRF
	PUSHJ	PDP,LEGM1
	MOVEI	U3,5
	SKIPE	U2,PLLF
	PUSHJ	PDP,LEGM1
	MOVNI	U3,4
	SKIPE	U2,PLLB
	PUSHJ	PDP,LEGM1
	MOVNI	U3,5
	SKIPE	U2,PLRB
	PUSHJ	PDP,LEGM1
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
;	MOVEI	U1,15
;	PUSHJ	PDP,MAGOUT
;	MOVEI	U1,12
;	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

LEGM1:	MOVEI	U4,↑D35
	TRNE	U2,1
	JRST	.+4
	LSH	U2,-1
	SOJG	U4,.-3
	POPJ	PDP,
	MOVEI	U1,[ASCIZ /,/]
	SKIPE	FLAG
	PUSHJ	PDP,PRINT
	MOVEI	U1,54			; A COMMA
	SKIPE	FLAG
	PUSHJ	PDP,MAGOUT		; CKLY
	MOVE	U1,U4
	PUSHJ	PDP,INOUT
	HRLZM	U5,MOVES(X4)
	MOVEI	U1,[ASCIZ /-/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,55		;A DASH
	PUSHJ	PDP,MAGOUT
	MOVE	U1,U4
	ADD	U1,U3
	SKIPE	OJ
	ADD	U1,U3
	PUSHJ	PDP,INOUT
	HRRM	U5,MOVES(X4)
	AOS	FLAG
	AOS	X4
	JRST	LEGM1+3

INOUT:	CAIL	U1,↑D27
	SOS	U1
	CAIL	U1,↑D18
	SOS	U1
	CAIL	U1,↑D9
	SOS	U1
	MOVEM	U1,U1ZYX#
	PUSHJ	PDP,NUMOUT
	MOVE	X1,U1ZYX
	PUSHJ	PDP,MAGOU3
	POPJ	PDP,

EXBITS:	LSHC	X5,-11		;EXTRACT GUARD BITS
	LSH	X5,-10
	LSHC	X5,-1
	LSH	X5,-10
	LSHC	X5,-1
	LSH	X5,-10
	LSHC	X5,3
	POPJ	PDP,

FIXIN:	MOVE	X1,X1S
	PUSHJ	PDP,INS4C		;MUST INSERT LINE
	SKIPE	BOOKM+1		;IS THERE ANOTHER MOVE
	JRST	FIX13
	PUSHJ	PDP,DMPFIL
	PUSHJ	PDP,TERPRI
	POPJ	PDP,

FIX9K:	MOVEI	U1,[ASCIZ /[CR FOR DRAW OR TYPE WIN-LOSS DISTANCE /]
	PUSHJ	PDP,PRINT
	TTYUUO	11,0
	SETZM	LASCAR
	PUSHJ	PDP,SCAN
	CAIN	U1,12
	JRST	.-2
	CAIE	U1,15
	HRLM	U1,BOOKM
	JRST	FIX11

NULL:	MOVEI	U1,[ASCIZ /0-0 STORES A NO-MOVE BOARD. DO YOU WANT THIS. Y OR N: /]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,NOYES
	JRST	FIX6		;TRY AGAIN
	JRST	FIX11		;STORE NO-MOVE BOARD

OA:	Z
OP:	Z
OK:	Z

MOVES:	BLOCK	20		;SPACE FOR LEGAL MOVES


;BOUT BOUT0 BOUT1 BOUT2 BOUT3

;************************************************************
;BOUT PRINTS THE CURRENT BOARD POSITION ON THE TTY.  ONE    *
;MUST BEWARE WHEN ONE USES BOUT, FOR IT DESTROYS REGISTERS  *
;U1, U2, AND U3 ON WEEKDAYS FROM 1 TO 4 PM.                 *
;************************************************************

BOUT:	MOVE	U2,SI		;GET MOVE INDEX
	MOVEI	U2,1
	SKIPE	COLOR
	SETZ	U2,	;CKLY
	MOVE	U4,A		;GET ACTIVE PIECES
BOUT0:	MOVE	U5,K		;& KINGS
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	MOVEI	U3,1
	MOVEI	U1,"B"
	TRNN	U2,1		;BLACK TO PLAY?
	MOVEI	U1,"W"
	PUSHJ	PDP,MAGOUT	; CKLY
	MOVEI	U1," "
	PUSHJ	PDP,MAGOUT
	LSH	U4,1
	LSH	U5,1
BOUT1:	TLNN	U4,400000	;A PIECE THERE?
	AOJA	U3,.-3		;NO
	MOVE	U1,U3
	PUSHJ	PDP,INOUT	;YES, SO PRINT NUMBER
	MOVEI	X1,"K"
	TLNE	U5,400000	;IS PIECE A KING?
	PUSHJ	PDP,TYO		;YES, SO PRINT "K"
	MOVEI	U1,"K"
	TLNE	U5,400000
	PUSHJ	PDP,MAGOUT
	LSH	U4,1
	LSH	U5,1		;SHIFT TO NEXT POSITION
	JUMPE	U4,BOUT2	;JUMP IF NO MORE PIECES
	MOVEI	X1,","		;THERE ARE MORE PIECES
	PUSHJ	PDP,TYO		;SO PRINT COMMA
	MOVEI	U1,54
	PUSHJ	PDP,MAGOUT
	AOJA	U3,BOUT1
BOUT2:	TLCE	U2,-1		;FIRST OR SECOND TIME HERE?
	JRST	BOUT3		;SECOND, SO EXIT
	TRC	U2,1
	MOVE	U4,P
	JRST	BOUT0
BOUT3:	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,
;BDOUT AGAIN AGAIN1 BDOUT1 BDOUT2 CRLFCK PPLUS BORDER PSTAR PHYFEN PBM PBK PWM PWK

;************************************************************
;BDOUT WILL PRINT OUT THE CURRENT BOARD IN PICTURE FORMAT.  *
;BDOUT USES REGISTERS A, P, K, U1, U2, U4, U5, X3, AND X4.  *
;REGISTERS A, P, AND K ARE NOT DESTROYED BY BDOUT           *
;************************************************************

BDOUT:;	MOVE	A,OA
;	MOVE	P,OP
;	MOVE	K,OK
	PUSHJ	PDP,TERPRI
	SETZB	X4,U2
	SETZM	X3

	MOVE	U4,A
	MOVE	U5,P
	AND	U4,K		;ACTIVE KINGS
	AND	U5,K		;PASSIVE KINGS
;\|\\M1SAIL25;\M2CHK.FNT[3,ALS];\F1
	PUSHJ	PDP,BORDER
	MOVEI	U1,"\"			;CALL CHK FONT
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"F"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"2"
	PUSHJ	PDP,MAGOUT
 	MOVEI	U1,"H"		;UPPER LEFT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,TBORDE
	MOVEI	U1,"X"		;UPPER RIGHT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,PLEFT
AGAIN:	PUSHJ	PDP,PPLUS	;PRINT + SIGN
	TRNN	U2,7
	JRST	CRLFCK
AGAIN1:	ROT	A,1
	ROT	U4,1
	ROT	P,1
	ROT	U5,1
	TLNN	U4,400000	;BK?
	JRST	.+6
	SKIPE	COLOR
	PUSHJ	PDP,PWK
	SKIPN	COLOR
	PUSHJ	PDP,PBK
	JRST	BDOUT1
	TLNN	A,400000	;BM?
	JRST	.+6		;NO
	SKIPE	COLOR
	PUSHJ	PDP,PWM
	SKIPN	COLOR
	PUSHJ	PDP,PBM
	JRST	BDOUT1
	TLNN	U5,400000	;WK?
	JRST	.+6		;NO
	SKIPE	COLOR
	PUSHJ	PDP,PBK
	SKIPN	COLOR
	PUSHJ	PDP,PWK
	JRST	BDOUT1
	TLNN	P,400000	;WM?
	JRST	.+6		;NO
	SKIPE	COLOR
	PUSHJ	PDP,PBM
	SKIPN	COLOR
	PUSHJ	PDP,PWM
	JRST	BDOUT1
	PUSHJ	PDP,PHYFEN	;EMPTY SQUARE
BDOUT1:	AOS	X4
	CAIN	X4,↑D8		;SHIFT OVER BITS 9, 18, 27
	JRST	BDOUT2
	CAIN	X4,↑D17
	JRST	BDOUT2
	CAIE	X4,↑D26
	JRST	CRLFCK
BDOUT2:	ROT	A,1
	ROT	U4,1
	ROT	P,1
	ROT	U5,1
	AOS	X4
CRLFCK:	TRNE	U2,7		;DO WE WANT A CR-LF?
	JRST	AGAIN		;NO
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,PRIGHT
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	SETCMM	X3
	JUMPGE	X3,.+4
	PUSHJ	PDP,PSTAR
	PUSHJ	PDP,PLEFT
	JRST	AGAIN1
	CAIE	U2,↑D64
	JRST	AGAIN-2
	PUSHJ	PDP,BORDER
	MOVEI	U1,"W"		;BOTTOM LEFT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,BBORDE	;BOTTOM BORDER
	MOVEI	U1,"G"		;BOTTOM RIGHT CORNER
	PUSHJ	PDP,MAGOUT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"β"
	SKIPE	COLOR
	MOVEI	U1,"α"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"π"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,15
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,12
	PUSHJ	PDP,MAGOUT
	ROT	A,1
	ROT	P,1
	MOVEI	U1,"\"			;RESTORE TEXT FONT
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"F"
	PUSHJ	PDP,MAGOUT
	MOVEI	U1,"1"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

PPLUS:	MOVEI	U1,[ASCIZ /+ /]
	PUSHJ	PDP,PRINT
	MOVEI	U1," "			;NON-PLAYING SQUARE
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

BORDER: MOVEI	U1,[ASCIZ /* * * * * * * * * */]
	PUSHJ	PDP,PRINT	
	POPJ	PDP,

TBORDE:	MOVEI	U1,"T"		;TOP LINE
	SKIPA
BBORDE:	MOVEI	U1,"U"		;BOTTOM LINE
	MOVEI	X2,10
	PUSHJ	PDP,MAGOUT
	SOJG	X2,.-1
	POPJ	PDP,

PSTAR:	MOVEI	U1,[ASCIZ /* /]
	PUSHJ	PDP,PRINT
	POPJ	PDP,

PLEFT:	MOVEI	U1,"V"
	SKIPA
PRIGHT:	MOVEI	U1,"F"
	PUSHJ	PDP,MAGOUT
	POPJ	PDP,

PHYFEN:	MOVEI	U1,[ASCIZ /  /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"Z"		;EMPTY PLAYING SQUARE
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PBM:	MOVEI	U1,[ASCIZ /B /]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /W /]		
	PUSHJ	PDP,PRINT
	MOVEI	U1,"d"		;black man
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PBK:	MOVEI	U1,[ASCIZ /BK/]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /WK/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"c"		;black king
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PWM:	MOVEI	U1,[ASCIZ /W /]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /B /]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"D"		;WHITE MAN
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

PWK:	MOVEI	U1,[ASCIZ /WK/]
	SKIPN	SIDE
	MOVEI	U1,[ASCIZ /BK/]
	PUSHJ	PDP,PRINT
	MOVEI	U1,"C"		;WHITE KING
	PUSHJ	PDP,MAGOUT
	AOS	U2
	POPJ	PDP,

LEGALY:	;SETZM	MJW(X3)		;MUST ZERO SINCE BITS MAY BE LEFT FROM BACK UP
	AOS	(PDP)
	SETOM	OJ
	SETZB	U3,U4
	SETZB	U5,Q
	MOVE	U1,A
	MOVE	U2,K
	AND	U2,U1		;ACTIVE KINGS
	MOVE	Z,U1
	IOR	Z,P
	XOR	Z,GUARD		;EMPTY SQUARES
	MOVE	X5,COLOR
	XOR	X5,X3
	ANDI	X5,1		;NEEDED LATER
	TRNE	X5,1
	EXCH	U1,U2
	JUMPE	U1,LEG1
	MOVE	U3,Z
	LSH	U3,4
	AND	U3,P
	LSH	U3,4
	AND	U3,U1
LEG1:	MOVEM	U3,PLRF(X3)
	JUMPE	U1,LEG2
	MOVE	U4,Z
	LSH	U4,5
	AND	U4,P
	LSH	U4,5
	AND	U4,U1
LEG2:	MOVEM	U4,PLLF(X3)
	JUMPE	U2,LEG3
	MOVE	U5,Z
	LSH	U5,-4
	AND	U5,P
	LSH	U5,-4
	AND	U5,U2
LEG3:	MOVEM	U5,PLLB(X3)
	JUMPE	U2,LEG4
	MOVE	Q,Z
	LSH	Q,-5
	AND	Q,P
	LSH	Q,-5
	AND	Q,U2
LEG4:	MOVEM	Q,PLRB(X3)
	SKIPE	Q		;ARE THERE ANY JUMPS
	POPJ	PDP,		;JUMP RETURN
	SKIPE	U5
	POPJ	PDP,
	SKIPE	U4
	POPJ	PDP,
	SKIPE	U3
	POPJ	PDP,
	AOS	(PDP)
	SETZM	OJ
	JUMPE	U1,LEG5
	MOVE	U3,Z
	LSH	U3,4
	AND	U3,U1
	MOVEM	U3,PLRF(X3)
	MOVE	U4,Z
	LSH	U4,5
	AND	U4,U1
	MOVEM	U4,PLLF(X3)
LEG5:	JUMPE	U2,LEG6
	MOVE	U5,Z
	LSH	U5,-4
	AND	U5,U2
	MOVEM	U5,PLLB(X3)
	MOVE	Q,Z
	LSH	Q,-5
	AND	Q,U2
	MOVEM	Q,PLRB(X3)
LEG6:	SKIPE	Q
	POPJ	PDP,
	SKIPE	U5
	POPJ	PDP,
	SKIPE	U4
	POPJ	PDP,
	SKIPE	U3
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,		;NO MOVE RETURN
GUARD:	377377377377
	END